【问题标题】:Removing char from string producing strange output从产生奇怪输出的字符串中删除字符
【发布时间】:2015-09-22 22:13:51
【问题描述】:

我下面的代码产生了奇怪的输出。我不太确定发生了什么。我的程序..此方法专门用于从字符串中删除任何出现的 char c。

在测试时,如果 string[0] 等于 char,那么这将删除出现。否则变量:word 将打印原始字符串。

代码:

rmchr(char *string, char c)
{ 
  int i=0, count=0;
  char word[100]={0};

  int s = strlen(string);

  for(i=0; i<=(s-2); i++)
  {
    if(string[i] != c)
    {
      strcat(word, &string[i]);
      count++;
    }
  }
  printf("Word: ");
  for(i=0; i<=count; i++)
  {
   printf("%c", word[i]); 
  }
  printf("\n");
}

输出:

Enter a String: Andrew
Enter a Char: f
Word: Andrew
n

Enter a String: AAABA
Enter a Char: A
Word: BA

Enter a String: David
Enter a Char: D
Word: avid
v

【问题讨论】:

标签: c arrays char output strcat


【解决方案1】:

strcat 将字符串附加到现有字符串。所以strcat(word, &amp;string[i]); 不是只是附加一个字符,它是在word 附加一整串字符。

为了更好地理解 strcat 正在做什么,试试这段代码

int main( void )
{
    char word[100] = {0};
    char string[] = "hello";
    strcat( word, &string[0] );
    strcat( word, &string[1] );
    printf( "%s\n", word );
}

【讨论】:

    【解决方案2】:

    改成

    for(i=0; i<s; i++)
    {
      if(string[i] != c)
      {
        word[count] = string[i];
        count++;
      }
    }
    printf("Word: ");
    for(i=0; i<count; i++)
    

    【讨论】:

      【解决方案3】:

      使用指针更容易,更好,更快

      void rmchr(char *string, char c)
      { char word[100], *p = word;
        for(; *string; string++) if(*string != c) *p++ = *string;
        *p = 0;
        printf("%s\n", word);
      }
      

      【讨论】:

        猜你喜欢
        • 2014-10-04
        • 1970-01-01
        • 2021-04-23
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 2020-05-04
        • 2016-06-13
        • 1970-01-01
        相关资源
        最近更新 更多