Удаление символа из строки, выдающей странный вывод
Мой код ниже производит странный вывод. Я не совсем уверен, от чего зависит. Моя программа... этот метод, в частности, состоит в том, чтобы удалить любое вхождение char c из строки.
После проверки, если строка [0] равна char, это удалит вхождение. В противном случае переменная: слово будет печатать исходную строку.
Код:
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
3 ответа
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);
}