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

Комментарии к программе - C++

Восстановить пароль Регистрация
 
Olechka1991
1 / 1 / 0
Регистрация: 28.06.2011
Сообщений: 90
13.05.2012, 00:10     Комментарии к программе #1
Есть программа которая считывает текст из файла и выводит только предложения,содержащие введенное с клавиатуры слово!!Помогите разобраться с кодом идущим со строчки
C++
1
std::ifstream in("file.txt");

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
include <iostream>
#include <fstream>
#include <string>
#include <ctype.h>
 #include <conio.h>
   #include <windows>
using namespace std;
int main()
{  
SetConsoleCP(1251);
SetConsoleOutputCP(1251);        
     size_t fpos = 0, loop = 0;
         string str,word;
         char S;
         cout << "Введите слово для поиска\n";
         cin >> word;
         std::ifstream in("file.txt");
   if (in)   { 
         in.unsetf(std::ios::skipws);
   while(in >>  S) {
         str += S;
        if(S == '.'|| S == '!' || S == '?'){
        fpos = str.find(word);
  if    (std::string::npos != fpos 
         && !isalpha(str[fpos - 1])
         &&!isalpha(str[fpos + word.length()]))
     {
         std::cout << str << std::endl;
         loop++;
     }   str.clear();
        } } }
  else
      std::cerr<< "Error in opening file\n";
  if(!loop) std::cout << "Not found !\n";  
  in.close();
     getch();
     return 0;
     }
Добавлено через 2 часа 24 минуты
что делает вот эта часть кода?
C++
1
2
3
4
5
6
7
8
 if    (string::npos != fpos
         && !isalpha(str[fpos - 1])
         &&!isalpha(str[fpos + word.length()]))
     {
         cout << str << std::endl;
         loop++;
     }   str.clear();
        } } }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2012, 00:10     Комментарии к программе
Посмотрите здесь:

C++ Комментарии к программе
Комментарии к программе C++
комментарии к программе C++
Напишите комментарии к программе C++
C++ написать комментарии к программе
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
13.05.2012, 00:33     Комментарии к программе #2
C++
1
2
3
4
5
6
7
8
9
if    (string::npos != fpos       // если подстрока найдена  в строке 
         && !isalpha(str[fpos - 1])   // если перед  подстрокой  есть пробел, запятая и т.д.
         &&!isalpha(str[fpos + word.length()]))   // если в конце подстроки есть пробел, запятая и т.д.
//  то есть реально  найденное слово :
     {
         cout << str << std::endl; // вывод строки 
         loop++;   // плюсуем метку   
     }   str.clear();  // обнулить  строку
        } } }
Добавлено через 1 минуту
код - это моё творчество, так что спрашивайте
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
13.05.2012, 00:34     Комментарии к программе #3
Как-то так:
Цитата Сообщение от Olechka1991 Посмотреть сообщение
C++
1
2
3
4
5
6
7
if (string::npos != fpos                // если подстрока найдена
    && !isalpha(str[fpos - 1])            // и симол перед подстрокой не буква
    &&!isalpha(str[fpos + word.length()]))    // и символ после подстроки не буква
{                                                         
    cout << str << std::endl;            // выводим строку
    loop++;                      // инкремент счётчика
}
Olechka1991
1 / 1 / 0
Регистрация: 28.06.2011
Сообщений: 90
13.05.2012, 10:12  [ТС]     Комментарии к программе #4
C++
1
2
3
4
if    (string::npos != fpos       // если подстрока найдена  в строке 
         && !isalpha(str[fpos - 1])   // если перед  подстрокой  есть пробел, запятая и т.д.
         &&!isalpha(str[fpos + word.length()]))   // если в конце подстроки есть пробел, запятая и т.д.
//  то есть реально  найденное слово :
а зачем вообще нужно проеверять на наличие проблема и т д перед подстрокой?

Добавлено через 32 минуты
и для чего переменная loop нужна?
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
13.05.2012, 11:13     Комментарии к программе #5
Цитата Сообщение от Olechka1991 Посмотреть сообщение
и для чего переменная loop нужна?
Цитата Сообщение от Olechka1991 Посмотреть сообщение
f(!loop) std::cout << "Not found !\n";
Если переменная LOOP == 0 , то таких слов нет !!

Цитата Сообщение от Olechka1991 Посмотреть сообщение
fpos = str.find(word);
Цитата Сообщение от Olechka1991 Посмотреть сообщение
а зачем вообще нужно проеверять на наличие проблема и т д перед подстрокой?
Потому что функция FIND ищет подстроку, а не слово в отдельности,
нужно убедиться в наличии разделителей
Olechka1991
1 / 1 / 0
Регистрация: 28.06.2011
Сообщений: 90
13.05.2012, 14:15  [ТС]     Комментарии к программе #6
а переменная fpos зачем?запоминает позицию?
Yandex
Объявления
13.05.2012, 14:15     Комментарии к программе
Ответ Создать тему
Опции темы

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