Форум программистов, компьютерный форум CyberForum.ru

Разделение произвольного текста на слова - C++

Восстановить пароль Регистрация
 
ruslan_bastos
1 / 1 / 0
Регистрация: 10.12.2012
Сообщений: 17
10.02.2013, 13:12     Разделение произвольного текста на слова #1
Пытаюсь разделить произвольный текст на отдельные слова. И присвоить каждое слово элементу структуры.
Но когда программа проходит первую строчку текста появляется ошибка, неизвестная мне.
Вот часть кода.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
void vvod(str *mas, FILE *fp, char *name)
{
 
        char seps[] = " .,!\n";
        int numWords = 0;
        char masStr[100];
        fp=fopen(name,"r");
        if(fp == NULL)
        {
            printf("\nОшибка открытия файла...");
        }
        else
        {
            while(!feof(fp))
            {
                fgets(masStr,100,fp);
                strcpy(mas[numWords].s, strtok( masStr, seps )); 
 
                while(mas[numWords].s != NULL )
                {
                    numWords++; // Получить следующий фрагмент
                    strcpy(mas[numWords].s, strtok( NULL, seps )); 
                    printf("%s\n", mas[numWords].s);
                }
                strcpy(masStr,"");
                
            }
            printf( "\nФайл прочитан. Нажмите ENTER.");
            getch();
        }
        fclose(fp);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
10.02.2013, 13:20     Разделение произвольного текста на слова #2
Цитата Сообщение от ruslan_bastos Посмотреть сообщение
str *mas
- пожалуста покажи как у тебя сделан пользовательский тип
А также покажи по коду CALL для void vvod(str *mas, FILE *fp, char *name)
ruslan_bastos
1 / 1 / 0
Регистрация: 10.12.2012
Сообщений: 17
10.02.2013, 13:50  [ТС]     Разделение произвольного текста на слова #3
struct str
{
char s[100];
};

И

vvod(mas, fp, name);
-=ЮрА=-
Заблокирован
Автор FAQ
10.02.2013, 14:02     Разделение произвольного текста на слова #4
Цитата Сообщение от ruslan_bastos Посмотреть сообщение
char seps[] = " .,!\n";
- попробуй изъять из делиметорв слеш-н, думаю он и крошит всё - ибо fgets берёт строку в ней по идеи сотаётся \n в самом конце и когда strtok обрезает этот делиметр в итоге в strcpy пробуем сделать нечто следующее
strcpy(mas[numWords].s, "\0"); это и приводит к краху. В свете всего этого продумай и добавь перед strcpy условие с логикой strtok( masStr, seps ) != NULL

Добавлено через 2 минуты
А вообще лучше организуй свой цикл
Цитата Сообщение от ruslan_bastos Посмотреть сообщение
while(!feof(fp))
* * * * * * {
* * * * * * * * fgets(masStr,100,fp);
* * * * * * * * strcpy(mas[numWords].s, strtok( masStr, seps ));
while(mas[numWords].s != NULL )
* * * * * * * * {
* * * * * * * * * * numWords++; // Получить следующий фрагмент
* * * * * * * * * * strcpy(mas[numWords].s, strtok( NULL, seps ));
* * * * * * * * * * printf("%s\n", mas[numWords].s);
* * * * * * * * }
* * * * * * * * strcpy(masStr,"");
}
вот так
C
1
2
3
4
5
6
7
8
9
10
11
while(!feof(fp))
            {
                fgets(masStr,100,fp);
        for(char * tok = strtok( masStr, seps ); tok; tok = strtok( NULL, seps ))
                {
                    strcpy(mas[numWords].s, tok); 
                    numWords++; // Получить следующий фрагмент
                    printf("%s\n", mas[numWords].s);
                }
                //strcpy(masStr,"");
            }
ruslan_bastos
1 / 1 / 0
Регистрация: 10.12.2012
Сообщений: 17
10.02.2013, 14:35  [ТС]     Разделение произвольного текста на слова #5
Всё отлично работает! Благодарю. Я так понял в цикле будет происходить разделение по словам пока будет существовать переменная tok. Как только она равна нулю цикл завершается?
-=ЮрА=-
10.02.2013, 14:39     Разделение произвольного текста на слова
  #6

Не по теме:

ruslan_bastos, да всё верно, кстати объявление tok можно вынести вначало void vvod(str *mas, FILE *fp, char *name)

Yandex
Объявления
10.02.2013, 14:39     Разделение произвольного текста на слова
Ответ Создать тему
Опции темы

Текущее время: 07:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru