Как работать с большими текстами? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Что посоветуете чтоб программка начала работать с большими текстами. С небольшой строкой у нас считвывает нормально, а с длинной считывание не происходит (зацикливается) (ввожу ловыпып2олр5длпр программа убирает 2 и 5 оставшиется 3 слова упорядочивает по алфавиту и выводит в консоль) (при вводе выаоооооолопваылпорлвыапрлдовыпрлваыплодпвы4ылвилдпылопы выдает дамп памяти) не могу понять проблему
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6. int dls, i=0;
  7. char s[300];
  8. char e;
  9. printf("Vvedite text\n");
  10. //scanf ("%s", s);
  11. do
  12. {
  13. scanf("%c", &s[i]);
  14. i++;
  15. }
  16. while(s[i-1] != '\n');
  17.  
  18. s[i-1] = '\0';
  19. for(i=0; s[i] != '\0'; i++)
  20.  
  21. dls = strlen(s);
  22. int j=0,k=0,n=0,f=0;
  23. char ms[50][400],c[400];
  24. // printf("%d\n",__LINE__);
  25. while(n<=dls)
  26. {
  27. //while(!((s[n] < 0x41 || s[n] > 0x5A) && (s[n] < 0x61 || s[n] > 0x7A)))
  28. while((s[n]!=',' && s[n]!= '.' && s[n]!= '1' && s[n]!= '2' && s[n]!= '3' && s[n]!= '4' && s[n]!= '5' && s[n]!= '6'
  29. && s[n]!= '7' && s[n]!= '8' && s[n]!= '9' && s[n]!= '0' && s[n]!= '-' && s[n]!= '=' && s[n]!= '!' && s[n]!= '@'
  30. && s[n]!= '#' && s[n]!= '$' && s[n]!= '%' && s[n]!= '^' && s[n]!= '&' && s[n]!= '*' && s[n]!= '(' && s[n]!= ')'
  31. && s[n]!= '_' && s[n]!= '+' && s[n]!= '"' && s[n]!= 'В№' && s[n]!= ';' && s[n]!= ':' && s[n]!= '?' && s[n]!= '/'
  32. && s[n]!= '|' && s[n]!= '>' && s[n]!= '<' && s[n]!= '`' && s[n]!= '~' && s[n]!= ' '))
  33. {
  34. ms[i][j]=s[n];
  35. j++;
  36. n++;
  37. }
  38.  
  39. j = 0;
  40. i++;
  41. n++;
  42. }
  43. // printf("%d\n",__LINE__);
  44. do
  45. {
  46. f=0;
  47. for(j=i-1;j>k;j--)
  48. {
  49. if (strcmp(ms[j],ms[j-1])<0)
  50. {
  51. strcpy(c,ms[j]);
  52. strcpy(ms[j],ms[j-1]);
  53. strcpy(ms[j-1],c);
  54. f=1;
  55. }
  56. }
  57. k++;
  58. }
  59. while(f);
  60. // printf("%d : i=%d\n",__LINE__,i);
  61. for (j=0;j<i;j++)
  62. {
  63. //printf("%d\n",__LINE__);
  64. if (ms[j][0])
  65. printf("text: %s\n",ms[j]);
  66. }
  67.  
  68. //printf("%d\n",__LINE__);
  69. return EXIT_SUCCESS;
  70. }
циклится при вводе большого текста, посоветуйте в какую сторону шагать

Решение задачи: «Как работать с большими текстами?»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6.     int i = 0, j = 0, k = 0, n = 0, f = 0;
  7.     char s[] = "qqqqwwwwwwwwertdfgcsvxbnvhfgv4hgfbvcbdvxcsdbvcv7cbxnxbxvdghhsyyyttwrfqfqv"
  8.     "vsbbnxhzyh9ffffggggggbbbbbbbbbbddddddd56aaaaaaaaafffffffdddddddd44ddddddddddfffffffcc"
  9.     "bbbbbbbbbb5wwwwwwwwwwwweeeeeeeeeeeeerrrrrrrrr0tttttttttttttttt3eeeeeeeeeeeeeeeeeeej5f"
  10.     "ghk1z";
  11.     char ms[50][400],c[400];
  12.     while(s[n]){
  13.         while((s[n] >= 'a' && s[n] <= 'z')){
  14.             ms[i][j]=s[n];
  15.             j++;
  16.             n++;
  17.         }
  18.         j = 0;
  19.         i++;
  20.         n++;
  21.     }
  22.     do{
  23.         f=0;
  24.         for(j=i-1;j>k;j--)
  25.         {
  26.             if (strcmp(ms[j],ms[j-1])<0)
  27.             {
  28.                 strcpy(c,ms[j]);
  29.                 strcpy(ms[j],ms[j-1]);
  30.                 strcpy(ms[j-1],c);
  31.                 f=1;
  32.             }
  33.         }
  34.         k++;
  35.     }while(f);
  36.     for (j=0;j<i;j++){
  37.         if (ms[j][0])
  38.         printf("text: %s\n",ms[j]);
  39.     }
  40.     return 0;
  41. }

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы с памятью и строками.
  2. Объявление переменных:
    • i, j, k, n, f - для управления циклами;
    • s - строка, с которой ведется работа;
    • ms - массив строк, в который разбивается исходная строка;
    • c - временная строка для обмена значениями в массиве ms.
  3. Заполнение массива ms строками из s.
  4. Приведение строк в нижний регистр и сортировка массива ms по алфавиту (метод сортировки пузырьком).
  5. Обмен значениями в массиве ms при необходимости (если текущая строка меньше предыдущей).
  6. Вывод отсортированных строк из массива ms.
  7. Возврат 0, означающий успешный завершение работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы