C++ 获取一个包含任意数量单词的字符串,并将这些单词存储在不同的字符串变量中?
我的目标是用C++实现这一点:C++ 获取一个包含任意数量单词的字符串,并将这些单词存储在不同的字符串变量中?,c++,string,C++,String,我的目标是用C++实现这一点: 1.允许用户输入任意字数的行。 2.将行拆分为不同的单词。 3.将这些单词存储到单独的字符串变量中。 我知道我们可以使用istringstream对象拆分字符串中的单词。 但我的问题是如何将它们存储在不同的字符串变量中?。我知道不可能创建字符串数组 另外,如何检测字符串流中字符串的结尾,就像filestream中的eof()标记一样?您有多种选择: 您可以有一个指向字符串的指针数组;但是,您需要提前知道有多少个单词更新:正如@BLASTFURNET所指出的,此选项
1.允许用户输入任意字数的行。
2.将行拆分为不同的单词。
3.将这些单词存储到单独的字符串变量中。
我知道我们可以使用istringstream对象拆分字符串中的单词。
但我的问题是如何将它们存储在不同的字符串变量中?。我知道不可能创建字符串数组
另外,如何检测字符串流中字符串的结尾,就像filestream中的eof()标记一样?您有多种选择:
istringstream iss(str);
string word;
while(iss >> word) {
/* do stuff with the word */
}
既然您已经在使用标准库,为什么不使用向量呢
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
std::string input = "abc def ghi";
std::istringstream ss(input);
std::string token;
std::vector<std::string> vec;
while(std::getline(ss, token, ' ')) {
vec.push_back(token);
}
//vec now contains ['abc', 'def', 'ghi']
#包括
#包括
#包括
#包括
std::string input=“abc def ghi”;
std::istringstream ss(输入);
字符串标记;
std::vec;
while(std::getline(ss,token“”){
向量推回(令牌);
}
//vec现在包含['abc','def','ghi']
是的,在从上述各种回答和评论中得出结论后,我在回答我自己的问题。我将以代码的形式回答
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
int main()
{
string str, word;
vector<string> myVector;
getline(cin, str);
stringstream iss(str);
while(iss >> word)
myVector.push_back(word);
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
字符串str,单词;
向量myVector;
getline(cin,str);
stringstream iss(str);
while(iss>>word)
myVector.push_back(单词);
}
可能的方法:1。创建指向字符串2的指针数组。存储每个变量的指针,以将单词存储到数组3。存储字符串读取到数组的每个元素在“我知道它不可能创建一个字符串数组”的位置。“这只是对这个任务的限制,不是吗?可以在C++中创建字符串数组(<代码> char *<代码>,<代码> Basic字符串S/<代码>)。你可以使用<代码> SrReXeXTokEnter迭代器来用ReEX分割输入字符串。对于C++,我是很新的。你能解释一下我如何创建指向每个字符串的指针吗>@Andrew你只需要获取字符串的地址;例如,您有string str=“hello world”
您必须将“&”放在变量名之前才能获得该字符串的地址。在这种情况下,string*ptrStr=&str
就足够了。@AndrewBond:您不需要指针数组。可以这样做,但这比使用标准库容器更容易出错,也更复杂。@Rodolfo:注释中的示例适用于单个字符串。你认为这对任意数量的字符串有意义吗?@Rodolfo:我同意,如果你开始实现你自己的动态数组,你只会重新发明std::vector
。学习C++的人应该从标准库开始,并在以后保存指针。<代码> VEC。代码>:-)最后,连同3张反对票,我有一个答案!!