Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > задача на строки


Автор: pharao2n 27.12.2011, 03:07
короче есть текст, есть массив разделителей, считываем текст, пока не найдем строку, в которой кол-во одниковых слов больше N, потом найти слова, которые оканчиваются подстрокой А, заменить их на заданное слово С, если меняли все меньше T раз - встасить строку B перед строкой текста. Массив разделителей - строка символов-разделителей, введенных без пробелов, пробел - разделитель, если указан в этом массиве.

начал писать, пытаюсь реализовать ввод и проверку окончания ввода, но где-то упираюсь в незарезервированую память, вобщем вот код
Код

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main()
{
    char *space,*substr,*zamstr,*forwardstr,tmp[256],**text,**words;
    int nword,nswap,i;
    //razddeliteli
    gets(tmp);
    space=(char*)malloc((strlen(tmp)+1)*sizeof(char));
    strcpy(space,tmp);

    //kol-vo slov v stroke
    scanf("%d",&nword);

    //substr
    gets(tmp);
    substr=(char*)malloc((strlen(tmp)+1)*sizeof(char));
    strcpy(substr,tmp);

    //slovo-zamena
    gets(tmp);
    zamstr=(char*)malloc((strlen(tmp)+1)*sizeof(char));
    strcpy(zamstr,tmp);

    //kol-vo zamen
    scanf("%d",&nswap);

    //stroka kotory pihaem pered etim vsem
    gets(tmp);
    forwardstr=(char*)malloc((strlen(tmp)+1)*sizeof(char));
    strcpy(forwardstr,tmp);

    //vvod teksta
    text=(char**)malloc(sizeof(char*));
    words=(char**)malloc(sizeof(char*));
    int eoi=0,numword=0;
    for (i=0;!eoi;i++)
    {
        //vvod i-oi str
        gets(tmp);
        text[i]=(char*)malloc((strlen(tmp)+1)*sizeof(char));
        strcpy(text[i],tmp);

        //proverka okonchania vvoda
        int k,j,count,lenword;
        char *b,*e,*word;
        while (*b != '\0')
        {

            while ( strchr(space, *b) && *b != '\0' )
            {
                ++b;
            }

            e=b;

            while ( !strchr(space, *e) && *e != '\0')
            {
                ++e;
            }

            words=(char**)realloc(words,(numword+1)*sizeof(char*));
            word=(char*)malloc((e-b)*sizeof(char));
            numword++;lenword=e-b;

            for (;b<=e;b++)
            {
                strcat(word,b);
            }

            words[numword-1]=(char*)malloc((lenword+1)*sizeof(char));
            strcat(words[numword-1],word);
        }

        for (k=0;k<numword;k++)
        {
            for (j=k;j<=numword;j++)
            {
                if (strcmp(words[k],words[j])==0) count++;
            }
        }
        if (count>nword) eoi=1;
    }
}

помогите найти ошибку, еще лучше была бы помощь в написании все программы, я немного не догоняю, как сделать замену слов

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)