c++ - C++ 函数在数字和字母之间添加空格
问题描述
我有这个看起来像这样的字符串
90hello
我想在它们之间添加一个空格,所以我创建了一个函数
int size = text.length();
int flag = 0;
for (int i=0; i<size; i++) {
flag=0
if(isdigit(text[i]) && isalpha(text[i+1])){
for (int j=size+!; j<0; j--) {
text[j] == text[j-1];
}
flag++;
}
if(flag!=0)
text[i+1]=" ";
}
但这只会做90 llo
我错过了什么??
编辑: 我再次输入它,以便我可以帮助其他人更轻松地阅读我有问题的代码,但我想我做得不好。对不起大家。
好吧,这是我程序中的代码,如果它更好的话!
int main(int argc, const char * argv[]) {
string s, gendata;
while (getline(cin,s)){
gendata += s;
}
int size = gendata.length();
int flag=0;
for (int i = 0; i < gendata.length(); i++){
flag=0;
if(isdigit(gendata[i]) && isalpha(gendata[i+1])){
flag++;
for (int j=size+1; j<0; j--) {
gendata[j] = gendata[j-1];
}
}
if(flag!=0)
gendata[i+1] = ' ';
}
cout << gendata << endl;
}
它编译但只是没有给出我想要的。
解决方案
代码中有几个问题......所以首先是循环
for (int j = size + 1; j < 0; j--)
总是会立即退出.. j < 0 永远不会是真的。将其更改为
for (int j = size + 1; j > 0; j--)
..并不是真正的改进。gendata[size + j]
这将导致访问超出字符串允许范围的元素的异常。在这种情况下,字符串不会隐式分配内存。所以必须扩展字符串......并且这里的大小会发生变化(size
必须增加变量)......等等。
比在循环中更改源字符串更容易的是将结果写入第二个target
字符串:
string target;
for (int i = 0; i < (int) gendata.length(); i++)
{
target += gendata[i];
// check i for (i < gendata.length() - 1) !!!
if (i < gendata.length() - 1 && isdigit(gendata[i]) && isalpha(gendata[i + 1]))
{
target += ' ';
}
}
推荐阅读
- java - Spring MVC 与 Spring Boot 与 Spring
- html - 隐藏内容显示并向下滚动时,Chrome 页面会跳转/闪烁
- angular - 禁用 ngx-bootstrap 弹出窗口?
- swift - 如何获取通知权限状态(Swift)?
- c++ - 使用 istream 和 ostream 对象作为类 c++ 的数据成员
- palantir-foundry - 如何在 Contour 中按两列对表格进行排序?
- arm - Cortex M 处理器如何获取指令
- python - 用于条件返回的python docstring
- r - R使用case_when按组跟踪列中的更改
- c++ - 使用 static_cast 从 int 转换为 float 时输出不正确
C++