On-line: гостей 0. Всего: 0 [подробнее..]
Программисты всех стран, объединяйтесь!

АвторСообщение



ссылка на сообщение  Отправлено: 07.07.18 16:05. Заголовок: Как в программе на 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-функция может быть определена.

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


Вывод программы на консоль:

 
1: 0

1: 2 - l
2: 3 - l


Фактически, когда значение параметра n равно 1, то данная функция эквивалентна вызову функции strchr.

В случае, когда n равно 0, или заданное вхождение символа не найдено, то функция возвращает NULL.

Спасибо: 0 
ПрофильЦитата Ответить
Новых ответов нет


Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 11
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет