我有一个词 vector ,其中包含一些词。
std::vector<std::string> words;
这些单词被连接成一个称为特征的字符数组(在每个单词之后,一个空字符 (\0) 被插入到数组中):
while (j < i - offset){
logger.message("j: " + toString(j) );
std::strcat(features,words.at(j).c_str());
std::strcat(features,"\0");
logger.message("std::strcat(features,words.at(j).c_str())");
j++;
}
之后我想恢复每个单词,但是下面的代码打印了所有连接的单词(它没有将单词除以插入的空字符\0)。
char * features_ptr = features;
while(*features_ptr){
std::string Str = std::string(features_ptr);
logger.message( "palavra: " + Str);
features_ptr += strlen(features) + 1;
}
如何逐字获取字符串?
最佳答案
std::strcat
不会添加 \0
分隔符,因为它对 c 字符串进行操作,而 \0
被视为空字符串,所以你的 features
将是一个由所有单词拼接在一起的字符串。如果将其视为 char
数组,则可以插入 \0
。目前尚不清楚您要达到的目标,无论它是什么,看起来都不是正确的做法,但为了练习:
#include <iostream>
#include <vector>
#include <string>
#include <cstring>
int main()
{
char features[20];
std::vector<std::string> words = { "123","456","789" };
int i = 0;
for (size_t n = 0; n < words.size(); ++n)
{
for (size_t m = 0; m < words[n].size(); ++m)
features[i++] = words[n][m];
features[i++] = 0;
}
features[i] = 0; //<-- extra terminating null
char *features_ptr = features;
while (*features_ptr)
{
std::cout << features_ptr << std::endl;
features_ptr += std::strlen(features_ptr) + 1;
}
}
123
456
789
请注意关于此方法的一个重要细节,在 for
循环之后添加第二个终止 null 的附加 features[i] = 0;
\0
在拼接字符串的末尾。如果您希望 while (*features_ptr)
循环在字符串末尾停止,这是必不可少的。
关于c++ - 在 char 数组中存储和恢复一组单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50589024/