我的问题听起来像这样:我输入一个巨大的字符串,数字用空格分隔。我需要拆分此字符串并将组件放在向量中,然后使用其组件。 (然后转换为整数bla bla ...)。
我在这里搜索了这个,但我完全不了解一些事情,所以请稍微解释一下。
还有一个问题:为什么下面再返回一个“Substring:”?
int main()
{
string s("10 20 30 50 2000");
istringstream iss(s);
while (iss)
{
string sub;
iss >> sub;
cout << "Substring: " << sub << endl;
}
system("pause");
return 0;
}
答案 0 :(得分:2)
为什么下面再返回一个“Substring:”?
因为你的循环被打破了;你在读取之前检查流状态。这与下面描述的问题相同:
答案 1 :(得分:0)
首先计算这样的空格数量:
int i = counter;
for( size_t i = 0; i < s.size(); ++i )
{
if( ' ' == s[i] )
{
++counter;
}
}
之后你必须在另一个子串中循环字符串s。
答案 2 :(得分:0)
尝试以下方法
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <iterator>
int main()
{
std::string s( "10 20 30 50 2000" );
std::istringstream is( s );
std::vector<std::string> v( ( std::istream_iterator<std::string>( is ) ),
std::istream_iterator<std::string>() );
for ( const std::string &t : v ) std::cout << t << std::endl;
return 0;
}
输出
10
20
30
50
2000
您最初可以将向量定义为类型std::vector<int>
,并在向量初始化中使用迭代器std::istream_iterator<int>
。
至于你的第二个问题,那么在输出字符串之前你必须检查它是否被读取。所以正确的循环看起来像
string sub;
while ( iss >> sub )
{
cout << "Substring: " << sub << endl;
}