我想输入一个短语并提取短语的每个字符:
int main()
{
int i = 0;
string line, command;
getline(cin, line); //gets the phrase ex: hi my name is andy
stringstream lineStream(line);
lineStream>>command;
while (command[i]!=" ") //while the character isn't a whitespace
{
cout << command[i]; //print out each character
i++;
}
}
然而我得到错误:在while语句
的指针和整数之间无法比较答案 0 :(得分:3)
正如您的标题“使用stringstream提取参数”建议:
我认为你正在寻找这个:
getline(cin, line);
stringstream lineStream(line);
std::vector<std::string> commands; //Can use a vector to store the words
while (lineStream>>command)
{
std::cout <<command<<std::endl;
//commands.push_back(command); // Push the words in vector for later use
}
答案 1 :(得分:0)
command
是一个字符串,因此command[i]
是一个字符。您无法将字符与字符串文字进行比较,但您可以将它们与字符文字进行比较,例如
command[i]!=' '
但是,您不会在字符串中获得空格,因为输入操作符>>
读取以空格分隔的“单词”。所以你有未定义的行为,因为循环将继续超出字符串的范围。
您可能需要两个循环,一个来自字符串流的外部读取,一个内部来获取当前单词中的字符。或者,或者在line
中循环遍历字符串(我不建议这样做,因为有更多的空格字符而不仅仅是空格)。或者当然,由于字符串流中的“输入”已经是空格分隔,只需打印字符串,无需遍历字符。
要从字符串流中提取所有单词并将其提取到字符串向量中,您可以使用以下内容:
std::istringstream is(line);
std::vector<std::string> command_and_args;
std::copy(std::istream_iterator<std::string>(is),
std::istream_iterator<std::string>(),
std::back_inserter(command_and_args));
在上面的代码之后,向量command_and_args
包含字符串流中所有以空格分隔的单词,command_and_args[0]
是命令。