Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2012, 03:29   #1
zZzzZzzzzzzzzz
 
Регистрация: 03.02.2012
Сообщений: 3
По умолчанию обработка строковых данных (на C)

Задание:
Ввести строку символов разделителей. Затем вводится массив строк текста с неизвестным количеством строк. Ввод текста заканчивается, если во введённой строке количество различных символов разделителей окажется равным заданному количеству. Из строк введенного текста удалить слова, имеющие длину меньше заданной в исходных данных величины, с одновременным удалением и символов разделителей, стоящих перед этими словами. Строки, в которых удалены все слова, удалить. Вывести преобразованный текст.

то что написал: http://pastebin.com/yKTdSDC5

Проблема в том, что программа работает некорректно, а ошибку найти не могу. Когда в строке одно слово без разделителей, программа реагирует неправильно, каждый раз выводя разную белиберду, иногда верно, иногда неверно
zZzzZzzzzzzzzz вне форума Ответить с цитированием
Старый 05.02.2012, 07:28   #2
zZzzZzzzzzzzzz
 
Регистрация: 03.02.2012
Сообщений: 3
По умолчанию

Если возникают трудности с пониманием кода, могу добавить комментарии, к тому что есть.
zZzzZzzzzzzzzz вне форума Ответить с цитированием
Старый 06.02.2012, 21:07   #3
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Код надо на форум вставлять, а не давать на него какие-то непонятные ссылки.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 08.02.2012, 15:21   #4
zZzzZzzzzzzzzz
 
Регистрация: 03.02.2012
Сообщений: 3
По умолчанию

Код:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <locale.h>
     
    char* enterSeperators()
    {
        printf("vvedite simvoly-razdeliteli\n");
        char *sepr=(char*)malloc(81*sizeof(char));
        gets(sepr);
        sepr[strlen(sepr)]='\0';
        return sepr;
    }
     
    int enterAmount()
    {
        int z;
        printf("kol-vo raznyh simvolov-razdeliteley:\n");
        scanf("%d", &z);
        return z;
    }
     
    char** enterLines(int z, char *sepr)
    {
        printf("sepr: %s   %i\n",sepr, z);
        int c=0,i,l,f=0,j,n;
        char line[81], **x;
        x = (char**) malloc(sizeof(char*));
        printf("\nVvedite stroki: \n");
        do
        {
            l=0;
            n=0;
            //printf("!!!!!!\n");
            gets(line);
            //printf("???????\n");
            char *r=(char*)malloc(strlen(line)*sizeof(char));
            x[c] = (char*) malloc(strlen(line)*sizeof(char));
            strcpy(x[c], line);
            for(i=0; i<strlen(line); i++)
            {
                for(j=0;j<strlen(r);j++)
                {
                    if(x[c][i]==r[j]) {f=0; break;} else f=1;
     
                }
                for(j=0;j<strlen(sepr);j++)
                {
                    if(x[c][i]==sepr[j] && f)
                    {
                        r[n]=sepr[j];
                        l++;
                        n++;
                    }
                }
                r[strlen(r)]='\0';
            }
            printf("r: %s   l: %i     c:%i\n", r,l,c);
            c++; //gq=c;
           for(i=0; i<strlen(r); i++) r[i] = '0';
        }
        while(l<z);
        x[0][0]=c;
        return x;
    }
     
    /////////////////////////////////////////////////////
     
    char** deleteWord(char **x, char *sepr)
    {
        int c=1, q=0, i=0, e=0, m;
        int start=0,final, wordLen;
        char **y;
        printf("Задайте длинну слова:\n");
        scanf("%d", &wordLen);
        y = (char**) malloc(sizeof(char*));
        y[0]=(char*)malloc(1*sizeof(char));
        do{
            start=0;
                y[c] = (char*) malloc(strlen(x[c])*sizeof(char));
                e=0;
                i=start;
                final=0;
        do {
            for(m=0;m<strlen(sepr);m++)
            if(x[c][i]==sepr[m] || i==strlen(x[c]))
            {
                final=i;
                if((final-start-1)<wordLen && !(final-start==wordLen && start==0)&& !(final==strlen(x[c])&&(final-start-1==0)))
                {
                 // НЕ записываем в массив y
                 start=final;
                }
                else
                {
                    //запишем в массив y
                    for(q=start;q<(final);q++,e++)
                        y[c][e]=x[c][q];
                    start=final;
                }
            }
            i++;
        }while(i<=strlen(x[c]));
        y[c][e]='\0';
        c++;
        } while(c<x[0][0]);
        y[0][0]=x[0][0];
        return y;
    }
     
    void output(char **y)
    {
        int c;
        printf("\n\nВывод конечного массива\n\n");
        for(c=1;c<y[0][0];c++)
        {
            printf("%s", y[c]); printf("\n");
        }
    }
     
    int main()
    {
        setlocale(LC_ALL, "Russian");
        char *sepr, **x, **y;
        int z;
        sepr=enterSeperators();
        z=enterAmount();
        x=enterLines(z, sepr);
        y=deleteWord(x, sepr);
        output(y);
        free(x); free(y);
        return 0;
    }
zZzzZzzzzzzzzz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обработка строковых данных chainik1 Помощь студентам 0 12.12.2010 11:42
Обработка строковых данных locdoc Паскаль, Turbo Pascal, PascalABC.NET 2 06.12.2010 17:28
Обработка строковых данных ChelseaFan Помощь студентам 3 03.12.2010 18:59
Обработка строковых данных >>arty<< Помощь студентам 4 15.01.2010 23:07