c++ - 在 char 数组中存储和恢复一组单词

标签 c++ string

我有一个词 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;
    }
}

演示:https://ideone.com/GoVlRl

123
456
789

请注意关于此方法的一个重要细节,在 for 循环之后添加第二个终止 null 的附加 features[i] = 0; \0 在拼接字符串的末尾。如果您希望 while (*features_ptr) 循环在字符串末尾停止,这是必不可少的。

关于c++ - 在 char 数组中存储和恢复一组单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50589024/

相关文章:

c++ - 非静态成员函数的无效使用(在 qt 中)

python - Ctypes:OSError:异常:堆栈溢出

c++ - 将 `auto` 关键字与 STL 迭代器一起使用

c++ - 在哪里可以找到 "Introduction to 3D game programming with DirectX 9.0c"的源代码示例?

java将字符添加到字符串中

java - 将长文本分成页面以供 viewpager 使用

C++ 性能挑战:整数到 std::string 的转换

c++ - 如何使用scons构建cpp文件: each file with an executable?

python - 如何在Python中检查2个字符串是否包含相同的字母和数字?

python - 每隔第 n 个字符拆分 python 字符串,迭代起始字符