C ++函数将字符串拆分为单词
Posted
技术标签:
【中文标题】C ++函数将字符串拆分为单词【英文标题】:C++ function split string into words 【发布时间】:2013-10-02 13:04:46 【问题描述】:我试图在 C++ 中编写一个函数,将我的字符串测试拆分为数组中的单独单词。我似乎无法正确循环中的内容...有人有任何想法吗?它应该打印“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;
【问题讨论】:
这是一种重新发明***。为什么不使用字符串流的默认行为? 两个 cmets:(a) 是什么阻止你自己调试这个? (你知道如何使用调试器,对吧?)和 (b) 如果这应该是 C++,那么为什么要使用裸指针和 C 风格的编程? sizeof(tempLine) 等价于使用 x86 架构中的 4(32 位)sizeof(char*)。您可以使用 strlen(tempLine) 获取字符串的长度。另外,我建议您使用 std::vectorstringstream
)?
【参考方案1】:
如果您只想显示字符串中的单词,请使用:
#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::vector
of std::string
std::vector<std::string> vec;
istringstream iss(test);
copy(istream_iterator<string>(iss),
istream_iterator<string>(),
back_inserter(vec));
【讨论】:
istringstream 真的很酷。但我想将它们存储在一个数组或其他东西中,这样我就可以用不同的算法打印单词 你可以从迭代器初始化向量:vector<string>vec istream_iterator<string>(iss), istream_iterator<string>();
以上是关于C ++函数将字符串拆分为单词的主要内容,如果未能解决你的问题,请参考以下文章