簡體   English   中英

從c中的字符串中刪除空格

[英]removing blanks from a string in c

我知道這是一個以前被問過很多次的問題,但我不是在要求解決方案本身,而是想知道為什么我的解決方案不起作用。

這是我的解決方案:

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

        *string++;
    }
    puts(string);
}

該程序只是為每個輸入打印空白(“”)。
在使用調試器運行時,我看到*string指向 '\\0' 。 是否可以“就地”進行?

這是在這里找到的原始解決方案:

void RemoveSpaces(char* source)
{
  char* i = source;
  char* j = source;
  while(*j != 0)
  {
    *i = *j++;
    if(*i != ' ')
      i++;
  }
  *i = 0;
}

這是一個很好的就地實現

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

可能是因為您正在修改源,傳遞給該函數的參數,當它查找空格時,將源快捷方式為'\\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

目前還不清楚“刪除空白”是什么意思。 如果您只想打印不帶空格的字符串,您可以將函數簡化為:

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

如果您想刪除底層字符串中的空格,它會變得有點復雜,因為您必須在 ' ' 之后移動字符以填充空白。 沒有可以插入的“空字符”來填充字符串中的空洞,您必須移動剩余的字符來填充它。

基本上,您的功能有兩個主要問題。 您正在用字符串終止字符替換空格,表示字符串在此處結束。 這不是您想要做的,因為空格后面可能有字符。 事實上,如果你只想打印字符串,你根本不應該修改它。

當您完成對字符串的迭代后,字符串指向字符串的末尾。 本質上將一個空字符串傳遞給puts() 在對它進行大量 ++ 之前,您需要將原始值傳遞給puts()

當你真正應該做 string++ 時,你也在做*string++ string++。 這實際上有效,因為它被解析為*(string++)但對於可讀性來說很糟糕。

如果要刪除字符串單詞之間的空格,
直接回答如下:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM