数组基于 C++ 中的句子
array based on a sentence in C++
可能的重复项:
拆分C++字符串
如何将一堆用空格分隔的单词读成一个数组?
假设我有这句话:
"我喜欢青蛙"
而这个数组:
string mySentenceArray[2]
我想做
mySentenceArray[0] = I
mySentenceArray[1] = like
mySentenceArray[2] = frogs
举个例子。(请不要告诉我对我刚刚写的句子进行硬编码,这是一个例子。
您可以将字符串转换为一系列标记,并将这些标记放入数组中。考虑一下:http://www.cplusplus.com/reference/clibrary/cstring/strtok/
有几种方法:
-
使用斯特托克。但它是C函数,而不是C++。混合 C 和 C++ 是一种糟糕的风格。此外
strtok
函数不是线程安全的。 -
使用 std::string::find 方法中的任何一种。这很复杂。
-
使用 std::stringstream 类。它需要太多的步骤。
使用 boost::algorithm:: string::split。我更喜欢这种方式。它既简单又快速。
除非我有一些其他用途来证明添加额外库的合理性,否则我可能只使用stringstream
:
std::istringstream buffer("I like frogs");
std::vector<std::string> words((std::istream_iterator<std::string>(buffer)),
std::istream_iterator<std::string>());
std::copy(words.begin(), words.end(),
std::ostream_iterator<std::string>(std::cout, "n"));
仅使用标准库:
istringstream sentence("I like frogs");
vector<string> words(
(istream_iterator<string>(sentence)),
(istream_iterator<string>()));
请注意,在至少一个构造函数参数上,看似不必要的括号实际上是必需的,否则您将被最烦人的解析所困扰。
或者,Boost 提供了一些有用的字符串算法,包括split
:
string sentence("I like frogs");
vector<string> words;
boost::algorithm::split(words, sentence, boost::algorithm::is_space());
相关文章:
- 如何删除peer if else分支中的冗长句子
- 在输入句子时终止 std::out_of_range
- 使用 C++ 验证 NMEA 句子
- 分析包含 NMEA 句子的日志文件C++
- Vscode/C++ - cout 无法输出完整的句子,也无法与整数连接
- 如何理解句子的生命周期始于对e的评估
- 该程序将.csv文件中的一系列单词放入数组中,然后随机生成句子.但它不起作用
- C++从句子中删除给定字符的程序不起作用
- 如何让正则表达式匹配句子中间?
- 如何获取句子中单词的第一个字母*没有*指针,引用等
- 为什么函数的返回类型与实际句子不一致?
- 如何将时间和日期转换为 C 或 C++ 的句子格式?
- 引用 using 声明引入的功能的句子是什么意思?
- C++ 如何从句子中读取和存储值
- 句子转换器在存在新行的情况下不起作用
- 如何输入每个单词在字符串数组中的句子,直到用户按Enter键
- 句子与字符串向量中的每个句子的相似程度
- Flex Lexer 模式匹配句子分隔符/标点符号作为 URL 路径部分
- 用句子从单词打印单词
- 如何在文件中找到单词或句子