我如何解决这个bug在c++ ?



stringvector接受给定string的输入

输入:Hello World

预期输出:Hello World

实际输出:你好

#include <bits/stdc++.h>
using namespace std;
int main()
{
string s1;
getline(cin, s1);
vector<string> vs1;
string s2;
for (int i = 0; i < s1.size(); i++) {
if (s1[i] != ' ') {
s2.push_back(s1[i]);
continue;
}
if (s1[i] == ' ' || i == s1.size() - 1) {
vs1.push_back(s2);
s2.clear();
}
}
for (string t : vs1) {
cout << t << " ";
}
return 0;
}

您的第一个if语句将对除空格以外的任何字符执行。这意味着当i==s1.size()-1时没有到达第二个if语句,因为s1[10] == 'd'为您的测试输入。

因为你的第一个if语句包含一个continue,当第一个为真时,第二个分支根本不会被求值。continue语句不应该在那里。

您可以使用std::stringstream,这样您就不需要不必要的if块。

#include <vector>
#include <string>
#include <sstream>
#include <iostream>
int main()
{
std::string s1;
std::getline(std::cin, s1);
std::string buffer;                  
std::stringstream ss(s1);       // Insert the string into a stream
std::vector<std::string> vs1; // Create vector to hold our words
while (ss >> buffer)
vs1.push_back(buffer);
for (std::string t : vs1) {
std::cout << t << " ";
}
return 0;
}

输出:Hello World

注意:using namespace std;是不好的做法。为什么使用命名空间std;"被认为是不好的做法?

当您使用vs1.push_back(s2)时,您将s2添加到其他元素。如果你想给第一个元素添加空间,你甚至不需要使用第一个if。给你:

#include <bits/stdc++.h>
using namespace std;
int main()
{
string s1;
getline(cin,s1);
vector < string > vs1;
string s2;
for(int i=0;i<s1.size();i++)
{
s2.push_back(s1[i]);

if(s1[i]==' ' || i==s1.size()-1)
{
vs1.push_back(s2);
s2.clear();
}
}
cout<<vs1[0]<<vs1[1];
return 0;
}

相关内容

  • 没有找到相关文章

最新更新