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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ruslan_bastos
1 / 1 / 0
Регистрация: 10.12.2012
Сообщений: 17
#1

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

10.02.2013, 13:12. Просмотров 547. Ответов 5
Метки нет (Все метки)

Пытаюсь разделить произвольный текст на отдельные слова. И присвоить каждое слово элементу структуры.
Но когда программа проходит первую строчку текста появляется ошибка, неизвестная мне.
Вот часть кода.
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);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2013, 13:12     Разделение произвольного текста на слова
Посмотрите здесь:

Дана строка символов, состоящая из произвольного текста, слова раз-делены пробелами. Вывести на экран порядковый номер слова, накрывающего k позицию - C++
Помогите с вот такой вот задачкой: Дана строка символов, состоящая из произвольного текста, слова раз- делены пробелами. Вывести на...

Токенизация, разделение текста на слова - C++
Здравствуйте, по заданию необходимо 1.Прочитать текст из первого файла. 2.Выделить словоформы и вписать их в отдельный двумерный...

Редактирование произвольного текста: удаление слова с заданным номером - C++
написать программу, которая редактирует произвольный текст, введенный с клавиатуры, удаляя из него слово с заданным номером(тоже с клавы...

Дана строка символов, состоящая из произвольного текста, слова разделены пробелами - C++
Дана строка символов, состоящая из произвольного текста, слова разделены пробелами. Вывести на экран порядковый номер слова ...

Разделение строки на слова - C++
Подскажите пожалуйста, как разделить строку на отдельные слова. Заранее спасибо.

Разделение строки на слова - C++
Текст в файле содержит числа, которые записаны в восьмеричной системе счисления. Преобразовать эти числа в десятичную систему счисления и...

разделение строки на слова - C++
нужно разбить строку на слова (си) без использования библиотеки string.h (пользоваться можно только stdio.h) можно использовать...

Разделение слова на буквы - C++
Всем доброго времени суток. У меня возник вопрос. Допустим у есть переменная X типа string, в которую записано слово, "Code". Как мне...

Вводится строка произвольного текста. - C++
Вводится строка произвольного текста. Подсчитать количество цифр в данной строке. помогите пожалуйста c++ )

Разделение строки на отдельные слова [С++] - C++
Надо разделить строку на отдельные слова. Использовать strtok() нельзя.

Символьные строки. Разделение на слова - C++
Помогите написать прогу. Не могу разобраться, какие команды применить. Так же нужно использовать отдельно функцию. В Файле находится...

Дана строка символов,состоящая из произвольного текста - C++
помогите пожалуйста с задачей(С++) Дана строка символов ,состоящая из произвольного текста,слова разделены пробелами.вывести на экран...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор 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     Разделение произвольного текста на слова
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru