首页 > 解决方案 > 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;

}

它编译但只是没有给出我想要的。

标签: c++

解决方案


代码中有几个问题......所以首先是循环

  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 += ' ';
    }
  }

推荐阅读