c++ 打印反转字符串的输出时有额外的空间

w51jfk4q  于 2022-11-19  发布在  其他
关注(0)|答案(1)|浏览(118)

我正在编写一个程序,颠倒字符串中单词的顺序。如果有一个句子,“I love纽约!",它应该改为“!York New love I”。我颠倒字符串中单词的顺序,方法是存储最后一个单词,然后添加空格,再存储倒数第二个单词,依此类推。但是当我打印输出时,它会在打印前添加一个空格。

#include<iostream>
#include<string>
#include<vector>
#include<sstream>
using namespace std;
string reverse(string s){
    vector<string> temp;
    string words;
    stringstream ss(s);
    while (ss>>words)
    {
        temp.push_back(words);
    }
    string ans;
    for (int i = words.size()-1; i >=0; --i)
    {
        if (i!=words.size()-1)
        {
            ans+= " ";
        }
        ans+=temp[i];
    }
    return ans;
}
int main(){
    string s("My name is Saad Arshad ");
    cout<<reverse(s);
    return 0;
}

输出:“阿尔沙德·萨阿德是我的名字”我认为单词的大小大于临时的,这就是为什么它发生,但我仍然需要更多的澄清。

zkure5ic

zkure5ic1#

对于注解来说太长了。所以我把它写在这里。在你的for循环中。在你构建新字符串的地方,你把“words”和“temp”弄混了。
请参阅下面的更正版本:

#include<iostream>
#include<string>
#include<vector>
#include<sstream>
using namespace std;
string reverse(string s) {
    vector<string> temp;
    string words;
    stringstream ss(s);
    while (ss >> words)
    {
        temp.push_back(words);
    }
    string ans;
    for (int i = temp.size() - 1; i >= 0; --i)
    {
        if (i != temp.size() - 1)
        {
            ans += " ";
        }
        ans += temp[i];
    }
    return ans;
}
int main() {
    string s("My name is Saad Arshad ");
    cout << reverse(s);
    return 0;
}

相关问题