Как работать с большими текстами? - 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;
}

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

  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
Похожие ответы