Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Не работает strtok() - C++

18.04.2017, 11:34. Просмотров 191. Ответов 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
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2017, 11:34
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Не работает strtok() (C++):

strtok не работает - C++
Почему не работает код? #include &lt;string.h&gt; #include &lt;iostream.h&gt; #pragma argsused int main(int argc, char* argv) { ...

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

Как работает функция strtok - C++
Как работает функция strtok. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;conio.h&gt; using namespace...

2012 strtok не работает и выдается ошибка, что требуется strtok_s - C++
Проблема в том, что в 2012-ом strtok не работает и выдается ошибка типо нужно strtok_s. Ввожу strtok_s, а это уже абсолютно другая функция,...

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

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

2
MrGluck
Модератор
Эксперт CЭксперт С++
7801 / 4845 / 754
Регистрация: 29.11.2010
Сообщений: 13,212
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 - C++
Привет! Решаю задачку на строки char. Возникла проблема вот код: //vuravnivanie slov po levomy i pravomy pol9m stranicu ...

strtok - C++
Почему так работает #include &lt;stdafx.h&gt; #include &lt;conio.h&gt; using namespace std; int main(){ char string = &quot;a string, of ,...

функция strtok() - C++
Объясните, пожалуйста, функцию strtok()...то что непонятно - заккоментила ps=strtok(str, &quot; &quot;); // понятно, что strtok () разбивает...

Функция strtok() - C++
Доброе время суток! Подскажите пожалуйста в чем проблема и как с ней бороться. Имеем такой код: #include &lt;iostream&gt; ...


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

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

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