Форум » C/C++ для начинающих (C/C++ for beginners) » Перестановка цифр в числах, встречающихся в строке. » Ответить

Перестановка цифр в числах, встречающихся в строке.

Сыроежка: Еще один вопрос для начинающих программистов, How I can reverse numbers in a string without reversing any text in C?, заданный на Stackoverflow. Требуется переставить цифры чисел, которые встречаются в строке, не затрагивая другие символы строки. Так как автор исходного вопроса на Stackoverflow не представил результаты своих попыток выполнить задачу, то есть не показал, что он успел сделать, и что у него не получается на текущий момент, то его вопрос был закрыт как слишком общий вопрос. Очевидно, что требуется сначала написать общую функцию reverse, которая переставляет любые символы в строке в заданном диапазоне. Имея такую функцию, можно легко написать основную функцию, выполняющую заданную задачу, которая будет находить начало и конец последовательностей цифр в строке и передавать найденные диапазоны в функцию reverse. Ниже представлена демонстрационная программа, в которой приведены реализации описанных двух функций, которые выполняют поставленную задачу. [pre2] #include <stdio.h> #include <ctype.h> void reverse( char *first, char *last ) { if ( first != last ) { for ( ; first < --last; ++first ) { char c = *first; *first = *last; *last = c; } } } char * reverse_numbers( char *s ) { for ( char *first = s; *first; ) { while ( !isdigit( ( unsigned char )*first ) ) ++first; if ( *first ) { char *last = first; while ( isdigit( ( unsigned char )*last ) ) ++last; reverse( first, last ); first = last; } } return s; } int main( void ) { char word[] = "Hello123456World."; puts( word ); puts( reverse_numbers( word ) ); } [/pre2] Вывод программы на консоль [pre2] Hello123456World. Hello654321World. [/pre2]

Ответов - 0



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