Еще один вопрос для начинающих программистов,
How I can reverse numbers in a string without reversing any text in C?, заданный на Stackoverflow.
Требуется переставить цифры чисел, которые встречаются в строке, не затрагивая другие символы строки.
Так как автор исходного вопроса на Stackoverflow не представил результаты своих попыток выполнить задачу, то есть не показал, что он успел сделать, и что у него не получается на текущий момент, то его вопрос был закрыт как слишком общий вопрос.
Очевидно, что требуется сначала написать общую функцию
reverse, которая переставляет любые символы в строке в заданном диапазоне. Имея такую функцию, можно легко написать основную функцию, выполняющую заданную задачу, которая будет находить начало и конец последовательностей цифр в строке и передавать найденные диапазоны в функцию
reverse.
Ниже представлена демонстрационная программа, в которой приведены реализации описанных двух функций, которые выполняют поставленную задачу.
#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 ) );
}
Вывод программы на консоль
Hello123456World.
Hello654321World.