std::string 搜索字符串中的数字并在前后插入空格
std::string search for numbers in a string & insert space before & after
我有这个字符串:
string strInput="33kfkdsfhk33 324234k334k 333 3 323434/5545435436***33/rrrr34 e3mdgmflkgfdlglk3434424dfffff555555555gggggg00000033lll-111111 1974-1-12";
我想把它格式化为:
"33 kfkdsfhk 33 324234 k 334 k 333 3 323434/5545435436*33/rrrr 34 e 3 mdgmflkgfdlglk 3434424 dfffff 555555555 gggggg 00000033lll-111111 1974-1-12";
也就是说,找到一个数字,并在数字前后插入空格。
请不要助推。。。只有标准的C++库。
这就是我尝试的,在数字后面插入空格,我想将所有连续的数字分组以获得所需的输出。
strInput = "33kfkdsfhk33 324234k334k 333 3 323434/545435436***33/rrrr34 e3mdgmflkgfdlglk3434424dfffff555555555555gggggg00000033lll-111111 1974-1-12";
for ( std::string::iterator it=strInput.begin(); it!=strInput.end(); ++it)
{
static bool flag = false;
if(isdigit(*it) && !flag)
{
strInput.insert(it,1,' ');
flag = true;
}
else
flag = false;
}
您的解决方案实际上在概念上看起来相当不错,但有一个主要问题:将insert
转换为字符串后,所有指向它的迭代器都可能无效,尤其是循环迭代器it
。这可能会导致segfault和各种难以解释的错误。
作为另一种解决方案,我建议不要修改您开始使用的字符串,而只是从中读取并逐步构建一个新的字符串,在需要的地方插入空格。这实际上只是对您当前代码的一个小修改!
string strInput = ... // whatever;
string newString = "";
bool currentisdigit = false;
bool previouswasdigit = false;
for ( std::string::iterator it=strInput.begin(); it!=strInput.end(); ++it)
{
previouswasdigit = currentisdigit;
currentisdigit = isdigit(*it);
if(currentisdigit && !previouswasdigit)
newString.push_back(' ');
if(!currentisdigit && previouswasdigit)
newString.push_back(' ');
newString.push_back(*it);
}
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 2D数组来自文本输入,中间有空格
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 预处理器:插入结构名称中的前一个行号
- 在未初始化映射的情况下,将值插入到映射的映射中
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 在字符串中插入空格
- 如何插入 4 个空格宽的制表符并将它们删除两个空格?
- 如何在 c++ 中将文件中的无空格插入器读取到数组中?
- 在字符串中的字符前添加空格C++插入函数
- 删除空格后如何将其插入字符串中
- KDevelop 会自动在 #include < file.h 中的 # 后插入一个空格>
- 在插入SQL数据库时忽略空格而不删除字符串中的空格
- 有效地向字符串追加或插入可变数量的空格
- 在一行中插入多个无空格的整数
- 在c++字符串中插入空格以分隔偶数字符集
- 如何在c++中使用cin将带有空格的文本插入到文本文档中
- std::string 搜索字符串中的数字并在前后插入空格
- 为什么要在空格中插入数字和特殊字符?
- 在c++字符串的某些字符后面插入空格