从c中删除字符串中的空格

时间:2018-02-06 11:47:32

标签: c string

我知道这个问题曾经多次被问过,但我不是要求解决方案本身,而是要知道为什么我的解决方案不起作用。

这是我的解决方案:

WITH
  Function Test (p_value in varchar2) return sys_refcursor
  IS
   ret_cur sys_refcursor;
   BEGIN    
      Open ret_cur for select colA from tableA where colB = p_value;
   return ret_cur;
  END ;
SELECT Test ('ABC') ---passing Input to function
FROM  DUAL;

该程序只为每个输入打印空白("") 在使用调试器运行时,我看到void delete_blanks(char *string) { while (*string) { if (*string == ' ') *string = '\0'; *string++; } puts(string); } 指向' \ 0'在末尾。是否可以“就地”"?

这是此处找到的原始解决方案:

*string

5 个答案:

答案 0 :(得分:1)

这是一个很好的就地实施

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] = '\0';

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

答案 1 :(得分:0)

可能是因为您正在修改源,传递给该函数的参数,当它查找空格时,将源快捷方式设置为&#39; \ 0&#39;,因此您不会打印正确的结果。尝试使用其他指针,例如你给出的例子。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

不清楚你的意思是什么&#34;删除空白&#34;。如果你想要的只是打印没有空格的字符串,你可以减少你的功能:

void delete_blanks(char *string)
{
    while (*string)
    { 
        if (*string != ' ')
             putchar(*string);
        string++;
    }
    putchar('\n');
}

如果你想删除底层字符串中的空格,它会变得有点复杂,因为你必须在&#39;之后移动字符。 &#39;填补空白。没有空字符&#39;您可以插入以填充字符串中的孔,您必须移动剩余的字符以填充它。

基本上你的功能有两个主要的问题。您正在用字符串终止字符替换空格,表示字符串在此处结束。这不是你想要做的,因为空格后面可能有字符。事实上,如果您只想打印字符串,则根本不应该修改它。

当您完成对字符串的迭代时,字符串指向字符串的结尾。基本上将空字符串传递给puts()。您需要在将大量++之前的原始值传递给puts()

当你真的要做字符串++时,你也在做*string++。这实际上有效,因为它被解析为*(string++),但可读性很差。

答案 4 :(得分:0)

如果要删除字符串单词之间的空格,
直接答案如下:

// #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);
}