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

Количество вхождений слова в файл - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вопрос по контейнерам http://www.cyberforum.ru/cpp-beginners/thread246405.html
Если я сделать вот так: struct mag { char adr; int zarpl_za_den; std::vector<std::string> vect; std::unordered_map<std::string, int> mapmassiv; }mas; Т.е. помещу контейнеры map и vector в статический массив структур, то я не совсем представляю себе как работать с контейнерами?
C++ запись массива структур в файл Запись массива структур в файл так, что бы потом можно было считывать, удалять ненужные записи, добавлять, сортировать, поиск. Я пробовал такSostav mas; FILE *f; f=fopen("database.txt","ab+"); if (!f) { cout<<"Unable to open "<<file<<" for writing.\n"; return(1); http://www.cyberforum.ru/cpp-beginners/thread246402.html
дайте пожалуйста ссылку где скачать Turbo С++ C++
дайте пожалуйста ссылку где скачать Turbo С++
Путем перестановки элементов квадратной вещественной матрицы добиться того, чтобы ее максимальный элемент находился в левом верхнем углу C++
Люди, помогите!!! Путем перестановки элементов квадратной вещественной матрицы добиться того, чтобы ее максимальный элемент находился в левом верхнем углу, следующий по величине - (1,1), следующий по величине – в позиции (2,2) и т.д., заполнив таким образом всю главную диагональ. Найти номер первой из строк, не содержащих не одного положительного элемента.
C++ Нарисовать фигуру (язык С) http://www.cyberforum.ru/cpp-beginners/thread246386.html
прямоугольник и сделать какую-то заливку цветную. заранее спс___)))
C++ Разделить число на дробную и целую часть как можно разделить число на дробную и целую часть void main() { long a1; // a1 = целая часть числла double a; // а число cout<<"Vvedite celoe chilso\n "; cin>>a; a1=a; а с отделением дробной части возникают проблемы:( подробнее

Показать сообщение отдельно
lesorub_
2 / 2 / 0
Регистрация: 20.02.2011
Сообщений: 51
27.02.2011, 19:31  [ТС]
Отлично, там всё переводит как надо Спасибо Вам большое, что помогаете, я недавно купил книжку Джесс Либерти и Бредли Джонс "Освой язык C++ самостоятельно за 21 день". Но к сожалению подробно о строках там говорится очень мало, а до написания собственных функций пока ещё не дошел.

Позвольте уделить мне ещё немного времени(знаю, что надоел). Вот финальная прога, где я хочу реализовать нормальный поиск в файле. Всё ищет, но чувствительна к регистру. Поэтому я спрашивал, как решить эту проблему. Но в итоге при модифицировании программы функцией преобразования строки в нижний регистр, программа вообще не хочет ничего искать. Посмотрите, пожалуйста, что здесь не так, а то 2-й день сижу, мучаюсь, никак не получить желаемый результат.

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
#include "stdafx.h"
 
using namespace std; 
char* strtolower(const char* str)
{
        char* res=new char[strlen(str)+1];
        strcpy(res, str);
        for(size_t i=0; i<strlen(res); ++i)
                res[i]=tolower(res[i]);
        return res;
}
 
 
int main()
{
        const int len = 80;
        char word[len]; 
        char line[len];
        char *modline;
        
        setlocale(LC_ALL, "Russian");
        
 
        while(1)
        {  
        cout << "Введите слово для поиска: ";
        if(gets(word)==NULL) goto q;
        
        int l_word = strlen(word);
        ifstream fin ("text.txt");
        if (!fin) 
           {
              cout << "Ошибка открытия файла." << endl;
              return 1;
           }
 
        int count = 0;
        
            while (fin.getline(line, len)) // заносим строку длинной len в переменную line
            {    
                modline=strtolower(line); //превращаем все прописные буквы в строчные
                char *p = modline; // р - для хранения позиции за найденной подстрокой
            while(p=strstr(p, word)) // многократно ищем вхождение подстроки в строку
            {                
                  char *c=p; //c - для хранения адреса начала вхождения подстроки
                  p+=l_word; // перемещаем указатель на длину заданного слова
                        
                   if(c!=modline) // слово не в начале строки?
                      if (!ispunct(*(c-1)) && !isspace(*(c-1))) // символ перед словом не разделитель?
                         continue;
                      if (ispunct(*p) || isspace(*p) || (*p == '\0')) // символ после слова разделитель?
                         count++;
                }
             }
        cout << endl << "Слово " << word << " встретилось в файле " << count << " раз(а). Выход <Ctrl+Z>" << endl << endl; 
     
        }
        q:;
    return 0;
}
В эту версию я добавил переменную modline для хранения модифицированной строки, т.е. строки нижнего регистра.

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