Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<ctype.h>
- #include<cstring>
- const int MAX_WORD_LEN = 32, // Константа задающая максимальную длинну слова
- MAX_INPUT_LEN = 1024; // Константа задающая максимальную длинну строки ввода
- // Можно поменять если нужно будет обрабатывать слова/строку длиннее
- // Функция принимающая на себя указатель на строку s и по ссылке позицию i
- // Создаёт строку в которую копирует слово начинающееся в позиции i
- // И возвращает указатель на эту строку
- char* get_word(const char *s, int &i){
- char *r = new char[MAX_WORD_LEN + 1]; // Создаём строку r
- // Выделяем под неё MAX_WORD_LEN памяти
- // + 1 байт для хранения маркера конца строки
- int rlen = 0; // Переменная содержашая текущую длинну строки r
- for (; isalnum(s[i]); ++i){ // Идём по строке s пока символ s[i] буква или цифра
- r[rlen++] = s[i]; // Добавляем в конец строки r символ s[i]
- // И увеличиваем rlen на 1
- }
- r[rlen] = '\0'; // В конец строки r добавляем маркер конца строки
- return r; // Возвращаем указатель на строку r
- }
- // Функция добавляющая слово w в результат r
- // Принимает указатель на строку результата r, и по ссылке её длинну rlen
- // А так же указатель на вставляемое слово w
- void add_word(char *r, int &rlen, const char *w){
- int wlen = strlen(w); // Запоминаем размер строки w в переменную wlen
- for (int i = 0; i < wlen; ++i){ // Идём по слову посимвольно
- r[rlen++] = w[i]; // И добавляем к результату
- }
- for (int i = wlen - 1; i >= 0; --i){ // Идём по слово посимвольно
- // Только теперь с конца в начало
- r[rlen++] = w[i]; // И добавляем к результату
- }
- }
- int main(){
- char *in = new char[MAX_INPUT_LEN + 1]; // Создаём строку in для хранения входных данных
- // Выделяем под неё MAX_INPUT_LEN памяти
- // + 1 байт для хранения маркера конца строки
- gets(in); // Читаем строку с консоли, записываем в in
- int inlen = strlen(in); // Запоминаем длинну строки in в переменную inlen
- char *r = new char[MAX_INPUT_LEN * 2 + 1]; // Создаём строку r для хранения результата
- // Выделяем под неё с запасом MAX_INPUT_LEN * 2 памяти
- // + 1 байт для хранения маркера конца строки
- int rlen = 0; // Переменная содержашая текущую длинну строки r
- int i = 0; // Создаём переменную i которой будем идти по строке
- while (i < inlen){ // Идём до конца строки in содержащей входную строку
- if (isalnum(in[i])){ // Если i-ый символ строки - буква или цифра
- char *w = get_word(in, i); // Создаём строку w содержащую текущее слово
- // Записываем в неё слово которое начинается в позиции i
- // При этом i становится равно позиции первого символа после слова
- add_word(r, rlen, w); // Добавляем слово к результату
- delete[] w; // Освобождаем память выделенную под текущее слово
- } else { // Если i-ый символ строки - не буква и не цифра
- r[rlen++] = in[i++]; // Добавляем его в конец нашего результата
- // После чего увеличиваем rlen и i на 1
- }
- }
- r[rlen] = '\0'; // Ставим маркер конца строки в конец результата
- puts(r); // Выводим результат
- delete[] r, in; // Освобождаем память выделенную под хранение строк ввода и результата
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement