Как работать с большими текстами? - C (СИ)
Формулировка задачи:
Что посоветуете чтоб программка начала работать с большими текстами. С небольшой строкой у нас считвывает нормально, а с длинной считывание не происходит (зацикливается)
(ввожу ловыпып2олр5длпр программа убирает 2 и 5 оставшиется 3 слова упорядочивает по алфавиту и выводит в консоль)
(при вводе выаоооооолопваылпорлвыапрлдовыпрлваыплодпвы4ылвилдпылопы выдает дамп памяти)
не могу понять проблему
#include <stdio.h> #include <string.h> #include <stdlib.h> int main() { int dls, i=0; char s[300]; char e; printf("Vvedite text\n"); //scanf ("%s", s); do { scanf("%c", &s[i]); i++; } while(s[i-1] != '\n'); s[i-1] = '\0'; for(i=0; s[i] != '\0'; i++) dls = strlen(s); int j=0,k=0,n=0,f=0; char ms[50][400],c[400]; // printf("%d\n",__LINE__); while(n<=dls) { //while(!((s[n] < 0x41 || s[n] > 0x5A) && (s[n] < 0x61 || s[n] > 0x7A))) while((s[n]!=',' && s[n]!= '.' && s[n]!= '1' && s[n]!= '2' && s[n]!= '3' && s[n]!= '4' && s[n]!= '5' && s[n]!= '6' && s[n]!= '7' && s[n]!= '8' && s[n]!= '9' && s[n]!= '0' && s[n]!= '-' && s[n]!= '=' && s[n]!= '!' && s[n]!= '@' && s[n]!= '#' && s[n]!= '$' && s[n]!= '%' && s[n]!= '^' && s[n]!= '&' && s[n]!= '*' && s[n]!= '(' && s[n]!= ')' && s[n]!= '_' && s[n]!= '+' && s[n]!= '"' && s[n]!= 'В№' && s[n]!= ';' && s[n]!= ':' && s[n]!= '?' && s[n]!= '/' && s[n]!= '|' && s[n]!= '>' && s[n]!= '<' && s[n]!= '`' && s[n]!= '~' && s[n]!= ' ')) { ms[i][j]=s[n]; j++; n++; } j = 0; i++; n++; } // printf("%d\n",__LINE__); do { f=0; for(j=i-1;j>k;j--) { if (strcmp(ms[j],ms[j-1])<0) { strcpy(c,ms[j]); strcpy(ms[j],ms[j-1]); strcpy(ms[j-1],c); f=1; } } k++; } while(f); // printf("%d : i=%d\n",__LINE__,i); for (j=0;j<i;j++) { //printf("%d\n",__LINE__); if (ms[j][0]) printf("text: %s\n",ms[j]); } //printf("%d\n",__LINE__); return EXIT_SUCCESS; }
циклится при вводе большого текста, посоветуйте в какую сторону шагать
Решение задачи: «Как работать с большими текстами?»
textual
Листинг программы
#include <stdio.h> #include <string.h> #include <stdlib.h> int main() { int i = 0, j = 0, k = 0, n = 0, f = 0; char s[] = "qqqqwwwwwwwwertdfgcsvxbnvhfgv4hgfbvcbdvxcsdbvcv7cbxnxbxvdghhsyyyttwrfqfqv" "vsbbnxhzyh9ffffggggggbbbbbbbbbbddddddd56aaaaaaaaafffffffdddddddd44ddddddddddfffffffcc" "bbbbbbbbbb5wwwwwwwwwwwweeeeeeeeeeeeerrrrrrrrr0tttttttttttttttt3eeeeeeeeeeeeeeeeeeej5f" "ghk1z"; char ms[50][400],c[400]; while(s[n]){ while((s[n] >= 'a' && s[n] <= 'z')){ ms[i][j]=s[n]; j++; n++; } j = 0; i++; n++; } do{ f=0; for(j=i-1;j>k;j--) { if (strcmp(ms[j],ms[j-1])<0) { strcpy(c,ms[j]); strcpy(ms[j],ms[j-1]); strcpy(ms[j-1],c); f=1; } } k++; }while(f); for (j=0;j<i;j++){ if (ms[j][0]) printf("text: %s\n",ms[j]); } return 0; }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с памятью и строками.
- Объявление переменных:
- i, j, k, n, f - для управления циклами;
- s - строка, с которой ведется работа;
- ms - массив строк, в который разбивается исходная строка;
- c - временная строка для обмена значениями в массиве ms.
- Заполнение массива ms строками из s.
- Приведение строк в нижний регистр и сортировка массива ms по алфавиту (метод сортировки пузырьком).
- Обмен значениями в массиве ms при необходимости (если текущая строка меньше предыдущей).
- Вывод отсортированных строк из массива ms.
- Возврат 0, означающий успешный завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д