C ++-搜索带下划线的字符串时,行解析器停顿

疯狂狂人

我编写了一个函数,该函数可以解析文本文件中的一行,并用列表中的相应副本替换cerain关键字。

代码如下:

std::string __iec_parse_cl(const std::string &line){
    std::string ret = line;

    static const size_t num_tokens = 6;
    static const char *tokens_search[6]{
        filled ...
    };

    static const char *tokens_replace[6]{
        filled ...
    };

    for(size_t x = 0; x < num_tokens; x++){
        size_t yolo;
        do{
            yolo = ret.find(tokens_search[x];
            if(yolo != std::string::npos){
                ret.erase(yolo, strlen(tokens_search[x]));
                ret.insert(yolo, tokens_replace[x]);
            }
        } while(yolo != std::string::npos);
    }

    return ret;
}

当我解析一个看起来像这样的令牌时:globalid用这个替换它:get_global_id一切都很好...

但是,当我尝试解析看起来像这样的令牌global_id并尝试用它替换它时:get_global_id程序停在函数中的某个位置:/

是什么原因造成的?

乔·Z

那是因为您的搜索需要在替换开始如果你每次更换后打印出你的字符串,你会看到它有get_global_id那么get_get_global_idget_get_get_global_id等等

您需要做的是告诉find您在上一次更换后开始。

    size_t yolo = 0;
    do{
        yolo = ret.find(tokens_search[x], yolo);
        if (yolo != std::string::npos){
            ret.erase(yolo, strlen(tokens_search[x]));
            ret.insert(yolo, tokens_replace[x]);
            yolo += strlen(tokens_replace[x]);
        }
    } while(yolo != std::string::npos);

如果令牌与其替换令牌之间存在其他重叠,则这样做也可以防止其他问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

搜索带下划线的字符串

C#中是否有任何连接字符串解析器?

UIButton在目标c中的下划线

如何在Android中为固定大小的字符串制作带下划线的Edittext字符?

在C中使用双下划线

用R字符串中的反斜杠下划线“ \ _”替换下划线“ _”

C ++ Boost 1.66使用Beast http请求解析器解析字符串

C函数参数前的下划线

C#中的解析器。如何从字符串填充类

在C ++中删除数字并在字符串中保留下划线

C#中接受下划线和空格的Alpha数字字符串的正则表达式

将带下划线的字符串转换为TitleCase

将字符串解析为int,下划线失败

如何在C / C ++中打印带下划线的文本?

解析字符串以大写字母,连字符和下划线分隔单词

正则表达式获取数字和下划线C#之间的字符串

如何解析带有多个下划线和破折号的字符串

带下划线的全文搜索

另一个解析器中的C字符串解析器

在Word 2013中将字符串放在带下划线的文本之前

带下划线

带下划线的Label C ++的第一个字母(不显示下划线)

vim用*搜索带下划线的变量名

Objective-C JSON解析器:如何解析以字符串而不是括号开头的json文件?

解析器字符串C#函数

实际字符的C ++ Hangman交换下划线

如何在公共静态字符串GetMessage(字符串文本)中更正此Build错误。带下划线的GetMessage

MATLAB 在数字和下划线字符串中搜索给定位置

带下划线的值模糊搜索的返回键