C++ vector<string>添加字符串失效:反转句子代码未达预期效果
问题定位
- 输入读取逻辑错误:
cin >> input默认以空格、换行、制表符等空白字符作为输入分隔符,输入带空格的句子时,只会读取第一个空格前的内容,比如示例输入只能读到I,后续所有字符都不会被存入input变量,自然无法完成单词拆分。 - 单词拆分逻辑缺失:仅在遇到空格时才会把临时存储的单词存入vector,但是句子最后一个单词末尾没有空格,遍历结束后临时变量里存储的最后一个单词不会被写入vector。
- 输出逻辑不符合要求:现有代码是正序遍历vector输出,没有实现倒序输出的效果,也没有处理首输出单词首字母大写、末尾无多余空格的细节要求。
修正后代码
#include<iostream> #include<string> #include<vector> #include<cctype> using namespace std; int main() { vector<string> s; string input; // 读取整行输入,保留所有空格 getline(cin, input); string temp = ""; for(int i=0; input[i]!='\0'; i++) { if(input[i] == ' ') { s.push_back(temp); temp = ""; } else { temp += input[i]; } } // 补存最后一个单词 if(!temp.empty()) { s.push_back(temp); } // 倒序输出单词 for(int i = s.size()-1; i >= 0; i--) { if(i == s.size()-1) { // 首个输出单词首字母大写 cout << (char)toupper(s[i][0]); cout << s[i].substr(1) << " "; } else if (i == 0) { // 末尾输出不加多余空格 cout << s[i]; } else { cout << s[i] << " "; } } return 0; }
内容的提问来源于stack exchange,提问作者XYZ
相关产品推荐
相关产品推荐

