Форум » C/C++ для начинающих (C/C++ for beginners) » Как в программе на C найти и заменить конкретный символ в строке. » Ответить

Как в программе на C найти и заменить конкретный символ в строке.

Сыроежка: Эта тема создана на основе вопроса на Stackoverflow -C- How to find and change a single particular character in a string. Этот вопрос может быть сведен к вопросу: как найти конкретный символ в строке. Если символ найден через указатель на него в строке, то, очевидно, его будет несложно заменить на другой символ. Как известно имеется стандартная C-функция strchr, объявленная в заголовочном файле <string.h>, которая позволяет найти заданный символ. Но в общем случае задача усложняется, если нужно найти не первое вхождение символа в строку, а некоторое n-ое его вхождение. Напрашивается необходимость наличия отдельной функции, которая находит n-ое вхождение заданного символа в строке. Логично будет, если функция будет определена на основе использования стандартной функции strchr и будет соблюдать соглашения, принятые для этой стандартной функции. Важно иметь в виду, что стандартная функция strchr позволяет находить в строке символ завершающего нуля '\0'.. Следовательно и новая определяемая функция также должна это делать, но только при условии, что ищется первое вхождения символа завершающего нуля '\0'. Ниже в демонстрационной программе показано, как такая C-функция может быть определена. [pre2] #include <stdio.h> #include <string.h> char * str_nth_chr( const char *s, char c, size_t n ) { char *p = NULL; if ( c != '\0' || n == 1 ) { for ( ; n && ( p = strchr( s, c ) ) != NULL; --n ) s = p + 1; } return n == 0 ? p : NULL; } int main( void ) { char *p; char s1[] = ""; char s2[] = "Hello"; for ( size_t i = 1; ( p = str_nth_chr( s1, '\0', i ) ) != NULL; i++ ) { printf( "%zu: %d\n", i, *p ); } putchar( '\n' ); for ( size_t i = 1; ( p = str_nth_chr( s2, 'l', i ) ) != NULL; i++ ) { printf( "%zu: %zu - %c\n", i, p - s2, *p ); } putchar( '\n' ); } [/pre2] Вывод программы на консоль: [pre2] 1: 0 1: 2 - l 2: 3 - l[/pre2] Фактически, когда значение параметра n равно 1, то данная функция эквивалентна вызову функции strchr. В случае, когда n равно 0, или заданное вхождение символа не найдено, то функция возвращает NULL.

Ответов - 0



полная версия страницы