Дополнить слова пробелами, чтобы длина была равна длине самого длинного слова - C (СИ)
Формулировка задачи:
Дополнить каждое слово предложения пробелами так , что бы длина была равна длине самого длинного слова. Распечатать получившееся предложение.
Помогите пожалуйста с этой лабой. Сделать надо на языке Си.
Решение задачи: «Дополнить слова пробелами, чтобы длина была равна длине самого длинного слова»
textual
Листинг программы
#include <stdio.h> #include <ctype.h> #include <string.h> #include <stdlib.h> /* указатель на следующее слово в строке, или 0, если слова кончились */ char *nextWord(char *str); /* * возвращает одно слово из строки str в буфере wrd. динна wrd = len - 1 * в случае неудачи вернёт NULL */ char *getWord(const char *str, char *wrd, size_t len); /* Дополнить каждое слово предложения пробелами так , что бы длина была равна длине самого длинного слова. Распечатать получившееся предложение. */ int main(void){ char buf[BUFSIZ], wrd[BUFSIZ]; char *pBuf, *pOut; size_t max_len, cur_len; printf("Put some string: "); fgets(buf, BUFSIZ, stdin); buf[strlen(buf) - 1] = '\0'; max_len = 0; for ( pBuf = buf; pBuf != NULL; pBuf = nextWord(pBuf) ){ getWord(pBuf, wrd, BUFSIZ); cur_len = strlen(wrd); if ( cur_len > max_len ) max_len = cur_len; } if ( (pOut = (char*)malloc(max_len + 1)) == NULL ){ printf("Memory error!\n"); exit(1); } pOut[max_len] = '\0'; for ( pBuf = buf; pBuf != NULL; pBuf = nextWord(pBuf) ){ getWord(pBuf, wrd, BUFSIZ); memset(pOut, ' ', max_len); memcpy(pOut, wrd, strlen(wrd)); printf("|%s|\n", pOut); } free(pOut); pOut = NULL; exit(0); } /* указатель на следующее слово в строке, или 0, если слова кончились */ char *nextWord(char *str){ char *p; for ( p = str; *p != '\0' && !isspace(*p) && !ispunct(*p); p++ ) ; if ( *p == '\0' ) return NULL; while ( isspace(*p) || ispunct(*p) ) p++; return ( *p == '\0' ) ? NULL : p; } /* * возвращает одно слово из строки str в буфере wrd. динна wrd = len - 1 * в случае неудачи вернёт NULL */ char *getWord(const char *str, char *wrd, size_t len){ char *p; char *w; for ( p = (char *)str, w = wrd; *p != '\0' && !isspace(*p) && !ispunct(*p) && --len > 0; p++, w++ ) *w = *p; *w = '\0'; return wrd; }
Объяснение кода листинга программы
- Программа получает строку от пользователя и сохраняет её в буфере buf.
- Затем программа разбивает эту строку на слова и сохраняет их в отдельные буферы wrd.
- В цикле проходит по каждому слову и добавляет пробелы в начало и в конец слова, пока длина слова не станет равной длине самого длинного слова.
- Выводит получившееся предложение на экран.
- После этого программа выводит на экран самое длинное слово.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д