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

Сравнить каждое слово из заданной строки с первый словом каждой строки в файле

09.02.2018, 01:02. Просмотров 171. Ответов 1

Ребят, помогите!!!
Уже наверное неделю мучаюсь((
Что не так? все время какие то ошибки. Задача такова:
Нужно сравнить каждое слово из введенной пользователем строки с первый словом каждой строки в файле.
Уровень моего знания с++ 2/10))) как то так.
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
74
75
76
77
#include "resource.h"
#include "stdafx.h"
#include <Windows.h>
 
 
#include <sstream>
 
#include <fstream>
#include <iostream>
#include <cstdio>                               //Эта библиотека обязательна (она может быть подключена автоматически но на всякий случай лучше её подключить сразу).
using namespace std;
void parser(int NumSimb, fstream &file, char* pch1)
{
    int art = 0;
    while (NumSimb > art & art >= 0)
    {
        
        char b[256];
        file.getline(b, 250);
 
        char * pch = strtok(b, " ,.-&");                                //Функция нахождения лексем
 
        if (strcmp(pch1, pch) == 0)
        {
            cout << "Строка " << pch1 << "совпадает с " << pch << endl;
        }
        else
        {
            cout << "Строка " << pch1 << "не совпадает с " << pch << endl;
        }
 
        art = file.tellg();
    }
    file.seekg(0, ios_base::beg);
}
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    fstream file;
    file.open("BD.txt");
 
    char S[256];                                                        //Мтрока для ввода предложения
 
 
    if (!file)
    {
        cout << "Файл не открыт\n\n";
    }
    else
    {
        cout << "Все ОК! Файл открыт!\n\n";
    }
 
    
    file.seekg(0, ios_base::end);                                       //становимся в конец файла
    int NumSimb = file.tellg();                                         //Получаем текущую позицию
    file.seekg(0, ios_base::beg);                                       //становимся обратно
 
    cout << "Введите строку: " << endl;
    gets_s(S);
    char * pch1 = strtok(S, " ,.-&");
    cout << "Первое слово которое Вы ввели: " << pch1 << endl;
 
    while (pch1 != NULL)                         // пока есть лексемы
    {
        parser(NumSimb, file, pch1);
        
        pch1 = strtok(NULL, " ,.-");
    }
 
 
    file.close();
 
    Sleep(10000);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2018, 01:02
Ответы с готовыми решениями:

Записать все слова символьной строки, чтобы каждое слово было с новой строки, и в отдельной переменной
Здравствуйте. нужно сделать задание, Записать все слова символьной строки,...

Скопировать второе слово каждой строки в начало следующей строки
Привет, прошу помощи! Заранее спасибо! Индивидуальное задание: Скопировать...

Строки в файлах (вывести из каждой строки последнее слово)
выводит из каждой строки последнее слово (строк может быть много) ... вот что я...

Поиск строки с необходимым словом в файле
Здравствуйте! Есть txt файл и в нём n-ое количество строк, необходимо найти...

Реверсировать каждое слово строки
Вообще никак не получается. Кто может подсказать, как это сделать? Есть вариант...

1
outoftime
║XLR8║
763 / 662 / 212
Регистрация: 25.07.2009
Сообщений: 3,320
Записей в блоге: 5
09.02.2018, 01:48 2
Цитата Сообщение от JohnTithor Посмотреть сообщение
//Эта библиотека обязательна (она может быть подключена автоматически но на всякий случай лучше её подключить сразу).
Вы правы, она подключается в #include <iostream>

Цитата Сообщение от JohnTithor Посмотреть сообщение
while (NumSimb > art & art >= 0)
Это не логическое, это побитовое или

Цитата Сообщение от JohnTithor Посмотреть сообщение
strtok(b, " ,.-&")
Это можно проще решить с помощь stringstream тем более что <sstream> ты уже подключил, но не используешь

Цитата Сообщение от JohnTithor Посмотреть сообщение
art = file.tellg();
Цитата Сообщение от JohnTithor Посмотреть сообщение
file.seekg(0, ios_base::beg);
Проще вычитать сразу весь файл и сохранить первые слова, скажем в std::set<std::string> чтобы проще было искать вхождения.

Добавлено через 16 минут
Как вариант
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
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <set>
 
int main()
{
    std::ifstream in;
    std::set<std::string> first_words;
    std::string line, word;
    while (std::getline(in, line))
    {
        word = line.substr(0, line.find_first_of(" ,.!?:"));
        first_words.insert(word);
    }
    std::cout << "Enter words to search> ";
    std::getline(std::cin, line);
    std::stringstream ss;
    ss << line;
    while (ss >> word)
        std::cout << "Word [" << line << "] found: "
                  << (first_words.find(word) != first_words.end() ? "yes" : "no")
                  << std::endl;
}
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.02.2018, 01:48

Удалить каждое четное слово из строки
Тема: строки в c++ Задание: Удалить каждое четное слово из строки.

Удалить каждое парное слово из строки
Удалить каждое парное слово из строки. С++

Удалить каждое четное слово из строки
Удалить каждое четное слово из строки. Есть такое начало: #include...


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

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

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