繁体   English   中英

从字符串中删除char产生奇怪的输出

[英]Removing char from string producing strange output

我下面的代码产生奇怪的输出。 我不太确定发生了什么。 我的程序..此方法专门用于从字符串中删除所有出现的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

strcat将字符串追加到现有字符串。 所以strcat(word, &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 );
}

改成

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM