Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Lydovik
0 / 0 / 0
Регистрация: 26.11.2016
Сообщений: 29
1

Не работает strtok()

18.04.2017, 11:34. Просмотров 245. Ответов 2
Метки нет (Все метки)

Здравствуйте, нужно посчитать количество слов в файле. Подскажите пожалуйста, что не так. Выводит только первую строку и все, количество слов не выводит вообще. Вот функция, где я считаю слова:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void Leksemy(char *name) {
        ifstream f1(name);
        char str1[255];
        char * pch = strtok(str1, " ,.-");
        while (!f1.eof()) {
            while (pch != NULL)                         // пока есть лексемы
            {
                f1.getline(str1, 255);
                cout << pch << "\n";
                pch = strtok(NULL, " ,.-");
                count++;
            }
        }
        cout << "Количество слов: " << count << endl;
        f1.close();
    }
Добавлено через 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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
using namespace std;
class Copy {
    string str;//для считування строк з файлу та запису у інший файл
    int count = 0;//лічильник кількості строк
public:
    Copy() {//метод для автоматичного создання файлу
        ofstream f1("C:/Users/Lydovic/Desktop/test.txt"); //создаємо файл у режимі запису
        /*вводимо строки у файл*/
        f1 << "Yesterday, all my troubles seemed so far away" << endl;
        f1 << "Now it looks as though they're here to stay" << endl;
        f1 << "Oh, I believe in yesterday." << endl;
        f1 << "-" << endl;
        f1 << "Suddenly, I'm not half to man I used to be," << endl;
        f1 << "There's a shadow hanging over me." << endl;
        f1 << "Oh, yesterday came suddenly." << endl;
        f1 << "-" << endl;
        f1 << "Why she had to go I don't know she woldn't say." << endl;
        f1 << "I said something wrong, now I long for yesterday." << endl;
        f1 << "-" << endl;
        f1 << "Yesterday, love was such an easy game to play." << endl;
        f1 << "Now I need a place to hide away." << endl;
        f1 << "Oh, I believe in yesterday.";
        f1.close();//закриваємо файл
    }
    void Fileinmass(char *name) {//метод для копіювання файлу у інший
        
        //strcat("C:/Users/Lydovic/Desktop/", name);
        ifstream f1(name);//відкриваємо файл у режимі считування
        ofstream f2("C:/Users/Lydovic/Desktop/Копия.txt");//создаємо файл у режимі запису, 
                                                          //в якому буде скопійовано данні файлу f1
        while (!f1.eof()) {//поки не кінець файлу
            getline(f1, str);//считуємо строку в змінну str з файлу f1
            f2 << str << endl; //та записуємо з str у файл f2
            cout << str << endl;
            count++;//рахуємо кількість перенесенних строк
        }
        setlocale(LC_ALL, "rus");
        cout << endl << "Количество строк: " << count << endl;
        f1.close();
        f2.close();
    }
    void Leksemy(char *name) {
        ifstream f1(name);
        char str1[255];
        char * pch = strtok(str1, " ,.-");
        while (!f1.eof()) {
            while (pch != NULL)                         // пока есть лексемы
            {
                f1.getline(str1, 255);
                cout << pch << "\n";
                pch = strtok(NULL, " ,.-");
                count++;
            }
        }
        cout << "Количество слов: " << count << endl;
        f1.close();
    }
    };
    int _tmain(int argc, _TCHAR* argv[])
    {
        setlocale(LC_ALL, "rus");
        Copy a;//создаємо об'єкт классу Copy
        cout << "Копирование строк:" << endl;
        char name[100];
        cout << "Введите имя подключаемого файла: ";
        cin >> name;
        cout << endl << endl;
        strcat(name, ".txt");
            a.Fileinmass(name);
            a.Leksemy(name);
        system("pause");
        return 0;
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2017, 11:34
Ответы с готовыми решениями:

Использование STRTOK Разбить строку на слова, из слов составить список C++ Функция strtok
Задача Дана строка слов с разделителями, в данном примере слова с пробелами...

strtok не работает
Почему не работает код? #include &lt;string.h&gt; #include &lt;iostream.h&gt; #pragma...

Как работает функция strtok
Как работает функция strtok. #include &quot;stdafx.h&quot; #include &lt;iostream&gt;...

2012 strtok не работает и выдается ошибка, что требуется strtok_s
Проблема в том, что в 2012-ом strtok не работает и выдается ошибка типо нужно...

strtok
Привет! Решаю задачку на строки char. Возникла проблема вот код: ...

2
MrGluck
Модератор
Эксперт CЭксперт С++
8102 / 4953 / 1436
Регистрация: 29.11.2010
Сообщений: 13,439
18.04.2017, 11:42 2
У вас строка str1 меняется, а strtok отталкивается от '\0' при указании NULL, после первого вызова с strtok(str1, " ,.-").
Вам нужно как-то так:
C++
1
2
3
4
5
6
7
8
9
while (f1.getline(str1, 255)) {
    char * pch = strtok(str1, " ,.-");
    while (pch != NULL)
    {
        cout << pch << "\n";
        pch = strtok(NULL, " ,.-");
        count++;
    }
}
1
Lydovik
0 / 0 / 0
Регистрация: 26.11.2016
Сообщений: 29
18.04.2017, 12:07  [ТС] 3
Спасибо, оно заработало
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2017, 12:07

strtok
Почему так работает #include &lt;stdafx.h&gt; #include &lt;conio.h&gt; using namespace...

strtok
Скажите, если ли функция, аналог strtok, для типа string?

strtok
как с помощью функции strtok вывести последнее слово


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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