Удаление символа из строки на языке c, получение ошибки конфликтующих типов
Я действительно новичок в кодировании и работал над предположительно простой проблемой удаления символа из строки на языке c. Когда я пытаюсь скомпилировать свой код, я продолжаю получать ошибку: конфликтующие типы для команды "удалить". Я не знаю, почему я получаю эту ошибку, потому что код в порядке. Мы будем благодарны за помощь в этом. Это код
#include <stdio.h>
#include <stdlib.h>
int main()
{
char ch,str[30],word[30];
void remove(char[],char[],char);
printf("enter the string\n");
gets(str);
printf("enter the character to move\n");
ch=getchar();
remove(str,word,ch);
printf("converted to %s\n",word);
}
void remove(char str[], char word[],char c){
int j=0,k=0;
while(str[j++]!='\0'){
if(str[j]!=c)word[k++]=str[j];}
word[k]='\0';
}
2 ответа
Заголовок <stdio.h>
уже есть объявление функции с именем remove
.
int remove(const char *filename);
Таким образом, компилятор выдает ошибку, потому что идентификатор remove
объявляется два раза с разными типами в одной и той же области файла.
Так что переименуйте свою функцию, например, remove_copy
.
Тем не менее, реализация функции неправильная.
Внутри цикла
while(str[j++]!='\0'){
if(str[j]!=c)word[k++]=str[j];}
вы сравниваете следующий элемент str[j]!=c
после тока из-за приращения в условии
str[j++]
Функцию можно объявить и реализовать следующим образом
char * remove_copy( char s1[], const char s2[], char c )
{
char *p = s1;
for ( ; *s2; ++s2 )
{
if ( *s2 != c )
{
*p++ = *s2;
}
}
*p = '\0';
return s1;
}
Обратите внимание, что функция gets
небезопасно и больше не поддерживается стандартом C. Вместо этого используйте стандартную функциюfgets
.
Вот демонстрационная программа.
#include <stdio.h>
#include <string.h>
char * remove_copy( char s1[], const char s2[], char c )
{
char *p = s1;
for ( ; *s2; ++s2 )
{
if ( *s2 != c )
{
*p++ = *s2;
}
}
*p = '\0';
return s1;
}
int main(void)
{
enum { N = 30 };
char str[N], word[N];
char c;
printf( "Enter a string: " );
fgets( str, N, stdin );
str[ strcspn( str, "\n" ) ] = '\0';
printf( "Enter a character to remove from the string: " );
c = getchar();
printf( "The result string is \"%s\"\n", remove_copy( word, str, c ) );
return 0;
}
Его вывод может выглядеть как
Enter a string: I am learning C++
Enter a character to remove from the string: +
The result string is "I am learning C"
- Измените имя функции.
remove
зарезервировано - Вы все равно не работаете
#include <stdio.h>
char *strchrrem(const char *str, char *dest, char c)
{
char *wrk = dest;
do
{
if(*str != c) *wrk++ = *str;
}while(*str++);
return dest;
}
int main(void)
{
char dest[64];
printf("%s\n", strchrrem("Hello world.", dest, 'l'));
}