C++07-2string字符串:4单词的长度3401练69.1 ,关于cin和getline,降龙十八掌,C++信奥赛/竞赛/专项选拔赛

题目描述

输入一行单词序列,相邻单词之间由 1 个或多个空格间隔,请对应地计算各个单词的长度。
注意,如果有标点符号(如连字符,逗号,句号),标点符号算作与之相连的词的一部分。没有被空格间隔开的符号串,都算作单词。

输入

一行单词序列,最少1个单词,最多300个单词,单词之间用至少1个空格间隔。单词序列总长度不超过1000。

输出

依次输出对应单词的长度,之间以逗号间隔。

样例输入 复制
She was born in 1990-01-02  and  from Beijing city.
样例输出 复制
3,3,4,2,10,3,4,7,5
#include
using namespace std;
int main() {
	/*
	思路:1)正常思路就是输出一个字符大小,然后输出逗号",",不过这个会使得最后一个也有逗号,
	2) 逆向思维,除了第一个数,其他都要先输出逗号,在输出一个数,这样就解决了
	*/
	//使用第二种思维,写法1 使用额外变量标记第一个元素
    string s;
    bool first = true;  // 用于标记是否为第一个元素

    while(cin >> s) {
        if (!first) {//是第一个元素不输出逗号
            cout << ",";  // 如果不是第一个元素,先输出逗号
        }
        cout << s.size();
        first = false;  // 标记已经不是第一个元素了
    }
	//方法二:将结果存储在容器中再输出
//	string s;
//	vector lengths;  // 用于存储每个字符串的长度
//	while(cin >> s) {
//
//		lengths.push_back(s.size());
//		if(cin.peek()=='\n') {// 检查下一个字符是否为换行符,如果是则结束输入
//			break;
//		}
//
//	}
//
//	for (int i = 0; i < lengths.size(); ++i) {
//		if (i > 0) {
//			cout << ",";  // 如果不是第一个元素,输出逗号
//		}
//		cout << lengths[i];
//	}


方法3,直接获取一行字符串,注意数组溢出的风险处理 
//	string a;
//	int x=0;
//	getline(cin, a);//输入一行字符串 
//	for(int i=0; i

思路:1)正常思路就是输出一个字符大小,然后输出逗号",",不过这个会使得最后一个也有逗号,
    2) 逆向思维,除了第一个数,其他都要先输出逗号,在输出一个数,这样就解决了

cin >> 遇到空格、制表符和换行符都会停止读取,直到遇到文件结束符(在 Windows 系统中是按下 Ctrl + Z 然后回车,在 Linux 或 macOS 系统中是按下 Ctrl + D)才会停止。它本身没办法单纯以回车作为结束符。

if(cin.peek()=='\n') {// 检查下一个字符是否为换行符,如果是则结束输入
          break;
       }

方法3:注意数组溢出的风险处理 

你可能感兴趣的:(c++信奥赛-07字符串,c++,开发语言,算法)