c++ - 在 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
解决方案
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));
}
推荐阅读
- php - 如何从数据库创建 JSON 树
- c# - 如何使用 Win32_PnPEntity 访问 USB 驱动器上的文件
- javascript - 输出 HTMLCollection 中的所有项目
- email - Dovecot-LDA 是否需要 -f 参数(以及它的目的是什么)?
- android - Android Studio 更改 xml 代码样式问题
- c - 使用指针和数组标出 2 个数字之间的所有奇数
- python - 如何更正 Django 模型中的限制值
- web - 如何阻止视频在网站上被盗?
- ruby-on-rails - 重定向状态 301 不适用于 heroku
- php - Slim Skeleton 返回 404 Not Found