Консультация № 72487
24.01.2007, 21:05
0.00 руб.
0 1 1
Пожалуйста, помогите решить задачу. Только на языке С!

Разработать функцию, которая доводит длину строки до заданной, вставляя пробелы между словами. При реализации функции запрещается пользоваться функциями библиотек языка С.

Примечания:
1. в большинстве заданий необходимо предусмотреть работу функции при некорректном задании ее параметров.
2. в тех заданиях, где применен термин "слово", под ним понимается любая последовательность символов, ограниченная любым числом пробелов и/или началом/концом строки.

Обсуждение

Неизвестный
25.01.2007, 03:02
общий
это ответ
Здравствуйте, Snowball!
Я конечно уже отвечал на Ваш подобный вопрос № 71523. Но если вам нужно именно на C, то вот...

Приложение:
#include <stdio.h>#include <malloc.h>int str_len(const char *str) { int length = 0; while(str[length++] != ‘\0‘); return length - 1;}char* stretch_string(const char *base_str, int new_len) { if(new_len <= str_len(base_str)) { printf("New length is not correct"); return NULL; } char *new_str = (char *) malloc(sizeof(char)*new_len + 1); new_str[new_len] = ‘\0‘; int base_len = str_len(base_str); int wc_count = 0; int i, j, limit; for(i=0; i<base_len; i++) if(base_str[i] == ‘ ‘) wc_count++; int add_wc = (int)((new_len-base_len)/wc_count); int big_wc_count = (int)((new_len-base_len)%wc_count); for(i=0, j=0; i<base_len; i++) { new_str[j++] = base_str[i]; if(base_str[i] == ‘ ‘) { limit = ((big_wc_count--) > 0) ? add_wc + 1 : add_wc; while(limit--) new_str[j++] = ‘ ‘; } } return new_str;}int main(int argc, char* argv[]) { const char *str = "This is a simple programm and it is best"; printf("Initial string:\n%s\nand it length: %d\n\n", str, str_len(str)); char *new_str = stretch_string(str, str_len(str) + 19); if(!new_str) { printf("Error stretched string\n"); return 0; } printf("Stretched string:\n%s\nand it length: %d\n", new_str, str_len(new_str)); free(new_str); return 0;}
Форма ответа