首页 > 解决方案 > 在 C++ 中将像 1100010011 这样的句子拆分成单词

问题描述

我正在使用以下内容在 C++ 中解析字符串“1100010011”:

string instring = "1100010011";
char last = instring.at(0);
string res = "";
vector<string> _chain;
int len_end = instring.length();
int len_instring = len_end + 1;
for (int count = 0; count != len_instring; ++count){
    if (count != len_end && instring.at(count) == last) {
        res += last;
    }
    else
    {
        _chain.push_back(res);
        if (count != len_end) {
            last = instring.at(count);
            res = last;
        };
    };
};

结果是“1100010011”->“11”、“000”、“1”、“00”、“11”。但我认为这段代码非常愚蠢。有没有办法改进这段代码?

upd(2021 年 2 月 10 日):
有没有办法使用按位逻辑运算来重写此代码以加快拆分速度?如果您将带有位的文本字符串想象为常规数字。1100010011 = 313

标签: c++splitbitwise-operators

解决方案


std::string有一个find_first_not_of成员函数,可用于查找与当前字符不同的第一个字母。

所以你可以做一个这样的循环:

#include <iostream>
#include <vector>

int main()
{
    auto input = std::string("1100010011");
    std::vector<std::string> vec;

    size_t it = 0;
    size_t last = 0;

    while ((it = input.find_first_not_of(input[it], last)) != std::string::npos)
    {
        vec.push_back(input.substr(last, it-last));
        last = it;
    }

    vec.push_back(input.substr(last, input.size() - last));
}

推荐阅读