C++函数将字符串拆分为单词

3

我正在尝试在C++中编写一个函数,它将我的字符串“test”拆分成数组中的单独单词。我似乎无法在循环中正确处理这个内容...有没有人有什么思路?它应该输出“this”。

void app::split() {

    string test = "this is my testing string.";

    char* tempLine = new char[test.size() + 1];
    strcpy(tempLine, test.c_str());

    char* singleWord;

    for (int i = 0; i < sizeof(tempLine); i++) {

        if (tempLine[i] == ' ') {
            words[wordCount] = singleWord;
            delete[]singleWord;
        }

            else {
            singleWord[i] = tempLine[i];
            wordCount++;

            }

    }

    cout << words[0];
    delete[]tempLine;


}

1
这有点是重复造轮子。为什么不使用字符串流的默认行为呢? - Danstahr
1
两个评论:(a) 什么阻止你自己调试?(你知道如何使用调试器,对吧?)和(b) 如果这应该是C++,那么为什么要使用裸指针和C风格的编程? - Paul R
1
sizeof(tempLine) 相当于在 x86 架构中使用 sizeof(char*),其大小为 4(32位)。您可以使用 strlen(tempLine) 获取字符串的长度。此外,我建议您使用 std::vector<char> 而不是原始的 char[] 数组。 - dacap
我不熟悉C++,几天前才开始学习编程... - NewFile
1
你也可以使用 string::substr() 函数来获取原始字符串的部分内容。 - dacap
1
你想学习基础知识(例如数组和指针)还是高级特性(例如标准容器和stringstream)? - Beta
1个回答

10

如果你只想显示字符串中的单词,请使用:

#include <algorithm>
#include <iterator>
#include <sstream>
//..
   string test= "this is my testing string.";
        istringstream iss(test);
        copy(istream_iterator<string>(iss),
                 istream_iterator<string>(),
                 ostream_iterator<string>(cout, "\n"));

否则,处理这些单词会使用std::vectorstd::string

     std::vector<std::string> vec;

        istringstream iss(test);
        copy(istream_iterator<string>(iss),
                 istream_iterator<string>(),
                 back_inserter(vec));

istringstream非常酷。但我想将它们存储在数组或其他数据结构中,以便可以使用不同的算法打印这些单词。 - NewFile
4
您可以直接使用迭代器初始化向量:vector<string> vec {istream_iterator<string>(iss), istream_iterator<string>()}; - Jerry Coffin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接