string
的vector
接受给定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;
}