删除c中的字符串空白

By simon at 2018-02-07 • 0人收藏 • 24人看过

我知道这个问题曾经被问过很多次,但我没有问 为解决方案本身,但知道为什么我的解决方案不工作。 这是我的解决方案:

void delete_blanks(char *string)
{
    while (*string)
    {
        if (*string == ' ')
            *string = '\0';

        *string++;
    }
    puts(string);
}
该程序只为每个输入打印空白(“”)。 同时运行e调试器,我看到*string指向'\ 0' 最后。可以“就地”吗? 这是原来的在这里发现:
void RemoveSpaces(char* source)
{
  char* i = source;
  char* j = source;
  while(*j != 0)
  {
    *i = *j++;
    if(*i != ' ')
      i++;
  }
  *i = 0;
}

5 个回复 | 最后更新于 2018-02-07
2018-02-07   #1

可能是因为你正在修改源代码,传递给它的参数 功能,当它寻找空格时,快速搜索rce为'\ 0',所以你是 不打印正确的结果。尝试使用其他指针,如示例 你给。

2018-02-07   #2

这是一个很好的就地实现

int main(void) {
    char inStr[] = "a cat is on the moon";

    int end = 0;

    for (int i = 0; i < strlen(inStr); i++) {
        if (inStr[i] != ' ') {
            if (i != end) {
                inStr[end] = inStr[i];
            }
            end++;
        }
    }

    inStr[end + 1] = '\0';

    printf("%s\n", inStr);
}

2018-02-07   #3

char a[]="it is a sunny morning";
int j=0;
for( int i=0;i<strlen(a);i++){
    if(a[i]!=' '){
        a[j]=a[i];
        j++;
    }
}
for(int i=j;i<strlen(a);i++){
    a[i]='\0';
}
printf("%s",a);
第一组没有空格的字母,然后删除超过的字母 空间。 输出itisasunnymorning

2018-02-07   #4

目前还不清楚“删除空白”是什么意思。如果你想要做的是 打印没有空格的字符串,你可以红色你用这个功能:

void delete_blanks(char *string)
{
    while (*string)
    { 
        if (*string != ' ')
             putchar(*string);
        string++;
    }
    putchar('\n');
}
如果你想删除底层字符串中的空格,它会变成一点点 比较复杂你将不得不在“”之后移动字符来填写 差距。没有“空白字符”,你可以插入以填补空缺在中 字符串,您必须移动剩余的字符来填充它。 基本上你的函数有两个主要的错误。 ÿ你正在更换 字符串终止字符的空格,表示字符串结束 这里。这不是你想要做的因为后面可能有字符 空间。事实上,如果你只想打印字符串,你不应该 修改它在一个二。 当你迭代完字符串时,字符串指向结尾 串。实质上传递一个空字符串puts().你需要通过 原来的价值,之前,你做了很多++,到puts() 你也在做puts()35当你真的应该做的字符串++。 这实际上工作,因为它被解析为puts()80,但是可怕的 [Readability。

2018-02-07   #5

如果你想删除一个字符串的单词之间的空格, 直接回答如下:

// #include <ctype.h>
void RemoveSpaces(char *str) {
    char *strBuff = (char*) malloc(strlen(str) + 1), *p = strBuff;
    while (*str) {
        if (!isspace(*str)) {
            *p = *str;
            p++;
        }
        str++;
    }
    *p = '\0';
    printf("%s\n", strBuff);
    free(strBuff);
}

int main(){
    RemoveSpaces("Thank you for help");
}
结果: 另外还有另一种方法,结果如下:
void RemoveSpaces(char *str) {
    while (*str) {
        if (!isspace(*str)) {
            putchar(*str);
        }
        str++;
    }
    printf("%s\n", str);
}

登录后方可回帖

Loading...