Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 获取一个包含任意数量单词的字符串,并将这些单词存储在不同的字符串变量中?_C++_String - Fatal编程技术网

C++ 获取一个包含任意数量单词的字符串,并将这些单词存储在不同的字符串变量中?

C++ 获取一个包含任意数量单词的字符串,并将这些单词存储在不同的字符串变量中?,c++,string,C++,String,我的目标是用C++实现这一点: 1.允许用户输入任意字数的行。 2.将行拆分为不同的单词。 3.将这些单词存储到单独的字符串变量中。 我知道我们可以使用istringstream对象拆分字符串中的单词。 但我的问题是如何将它们存储在不同的字符串变量中?。我知道不可能创建字符串数组 另外,如何检测字符串流中字符串的结尾,就像filestream中的eof()标记一样?您有多种选择: 您可以有一个指向字符串的指针数组;但是,您需要提前知道有多少个单词更新:正如@BLASTFURNET所指出的,此选项

我的目标是用C++实现这一点:
1.允许用户输入任意字数的行。
2.将行拆分为不同的单词。
3.将这些单词存储到单独的字符串变量中。
我知道我们可以使用istringstream对象拆分字符串中的单词。
但我的问题是如何将它们存储在不同的字符串变量中?。我知道不可能创建字符串数组


另外,如何检测字符串流中字符串的结尾,就像filestream中的eof()标记一样?

您有多种选择:

  • 您可以有一个指向字符串的指针数组;但是,您需要提前知道有多少个单词更新:正如@BLASTFURNET所指出的,此选项容易出错,应避免使用
  • 您可以使用(或任何其他)存储它们
  • 要获取可以使用while循环和提取操作符的单词,当您到达字符串末尾时,它将自动停止

    例如:

    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张反对票,我有一个答案!!