Я пишу функцию eliminate(char *str, int character)
, которая берет c-строку и символ для исключения в качестве входных данных, сканирует str
для экземпляров character
и заменяет значение в текущем индексе. .. какие? Я думал, NULL
, но это кажется рискованным и может испортить другие функции, которые полагаются на нуль-терминатор в c-строке. Например:Назначение NULL в середине строки c
char *eliminate(char *str, int character) {
if (!str) return str;
int index = 0;
while (str[index])
if (str[index] == character)
str[index++] = '\0'; //THIS LINE IS IN QUESTION
return str;
}
Мой вопрос, как я правильно реализовать эту функцию таким образом, что я фактически устраняет все экземпляры указанного символа в строке? И если надлежащее устранение назначает '\0'
символу, который нужно заменить, как это не влияет на всю строку (то есть, она фактически заканчивается на первом). Например, если бы я дважды запускал указанную выше функцию в той же строке, второй вызов будет рассматривать только строку до того места, где был заменен последний символ.
Вы можете пересмотреть эту петлю ... кажется, что он будет работать вечно ... – Barry
'NULL' не символ и никогда не должны быть использованы как целое значение. Большинство компиляторов определяют его '(void *) 0'. Включите предупреждения компилятора и обратите внимание на них! – Olaf
И выберите один язык. – Olaf