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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 5.00
broken_wings
0 / 0 / 0
Регистрация: 09.01.2010
Сообщений: 10
#1

"Сканирование" текста в файле. - C++

17.04.2010, 21:52. Просмотров 1097. Ответов 12
Метки нет (Все метки)

Доброго времени суток.
Нужно вывести текст в файл,после чего "просканировать " текст на предмет слов yes или no и,если таковые имеются,заменить их на no или yes соответственно.

Код,выводящий текст в файл я написал,а вот как сделать поиск - понять не могу ((

Если я правильно понял задание - новый текст нужно вывести в другой файл.

Помогите,пожалуйста.

И еще,у меня почему-то из всего текста,который я ввожу,выводится только первое слово (


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream.h>
#include <conio.h>
#include <fstream.h>
#include <string.h>
#define max_len 1000
void main()
{
clrscr();
char string[max_len];
char *token;
char seps[] = " ,\t,\n,\0";
cout<<"input text:";
cin.getline(string,max_len);
token=strtok(string,seps);
ofstream out;
out.open("D:\\out.txt");
out<<string;
cout<<"text introduced succesfully";
out.close();
getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2010, 21:52     "Сканирование" текста в файле.
Посмотрите здесь:

"вставка" с "заменой" текста в файле. - C++
Здравствуйте. Решил для обретения бесценного опыта написать свой простенький парсер конфигов. Вообщем читает вполне себе читает...

Заменить в файле все знаки "+" на знаки "-", а знаки "-" на знаки "+" - C++
Добрый день помогите перевести код на Паскале на язык C++. uses crt; const a='+'; b='-'; var f : Text; st: String; i: Byte;...

Замена "," в файле на "." - C++
Доброго времени суток!! Возник вопрос , как заменить запятую в файле на точку? Просто vector&lt;double&gt; оказывается не поддерживает...

Сохранение изменений в исполняемом файле, "самоизменяющийся" .exe файл - C++
Добрый день. В свое время был замечательный опыт программирования на ассемблере Z80 (ZX Spectrum), где можно было творить все, что...

Посчитать, сколько раз написано слово "hello" в файле - C++
Среда программирования Dev C++ Язык программирования С: Как реализовать программу, подсчитывающую сколько раз написано слово hello! ...

Ошибка "Error C2064" в файле xutility.h на VS2010 - C++
Не могу разобраться с ошибкой :error C2064: результатом вычисления фрагмента не является функция, принимающая 2 аргументов. проблема...

Найти запись подстроку в строке в файле до символа "\n" и вернуть её оттуда - C++
Не получается преобразовать строку в указатель на массив. Тонкостей увы не знаю таких операций. Подскажите. Изменения нужно внести в ф-ию...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
21.04.2010, 06:52     "Сканирование" текста в файле. #2
это надо двигаться по строке и, если встречено слово, то проверить, равно ли оно yes, если равно, то заменить его на no, а если оно не равно yes, то проверить не равно ли оно no, если равно, заменить на yes, иначе двигаться дальше
тут нельзя юзать быстрые методы типа найти слово и заменить его, так как изменённые слова снова будут меняться
если юзаешь strtok() - потеряешь разделители, так как она обнуляет их (и потом не различишь какие там были разделители, сколько их там было)
broken_wings
0 / 0 / 0
Регистрация: 09.01.2010
Сообщений: 10
21.04.2010, 20:16  [ТС]     "Сканирование" текста в файле. #3
accept, а не могли бы дать пример какой-нибудь?
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
22.04.2010, 05:09     "Сканирование" текста в файле. #4
там на C++ быстрее получится, вроде, через string
если задание - просто заменить слова, без учёта разделителей
broken_wings
0 / 0 / 0
Регистрация: 09.01.2010
Сообщений: 10
22.04.2010, 23:52  [ТС]     "Сканирование" текста в файле. #5
accept, string у меня - простая переменная,если вы об этом)
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
23.04.2010, 10:42     "Сканирование" текста в файле. #6
не, я про тип в C++, который называется string
там можно строки складывать, сравнивать a += b, a == b, делать замену, превращать в потоки (и читать их, как файловые потоки читаешь)
broken_wings
0 / 0 / 0
Регистрация: 09.01.2010
Сообщений: 10
25.04.2010, 13:56  [ТС]     "Сканирование" текста в файле. #7
accept, ну а примером к моему коду не поделитесь?)
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
26.04.2010, 07:40     "Сканирование" текста в файле. #8
вот пара примеров, тут есть string
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
 
#include <iostream>
#include <fstream>
 
using namespace std;
 
// добавляет в первый файл второй файл
int main(void)
{
    fstream f1;
    fstream f2;
    char c;
        
    const char *f1name = "file1.txt";
    const char *f2name = "file2.txt";
        
        
    f1.open(f1name, ios::in);
    
    if (!f1.is_open()) {
        cerr << "error 1" << endl;
        return 1;
    } else
        f1.close();    
    
    f1.open(f1name, ios::out | ios::app);
    f2.open(f2name, ios::in);
    
    if (!f1.is_open() || !f2.is_open()) {
        cerr << "error 2" << endl;
        return 1;
    }
    
    while (f2.get(c))
        f1 << c;    
    
    f1.close();
    f2.close();
        
    cout << "ok, "
         << f2name
         << " appended to "
         << f1name
         << endl;    
        
    return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main(void)
{
    string s;
    ifstream in("file.txt");
    
    while (getline(in, s)) {
        if (s == "lineexit")
            break;
        cout << s << endl;
    }
    
    return 0;
}

там ещё getline() для string

это поделить строку, склеить обратно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
#include <iostream>
#include <sstream>
 
using namespace std;
 
// makes an istringstream
int main(void)
{
    string a = "a b c d", b;
    istringstream is(a);
        
    while (is >> b)
        cout << b << endl;
        
    return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
#include <iostream>
 
using namespace std;
 
/* склеивает строки */
int main(void)
{
    string s1 = "one",
           s2 = "two";
    
    cout << s1
         << endl
         << s2
         << endl;
    cout << s1 + " " + s2 + "\r\n";
    return 0;
}
easybudda
Эксперт CЭксперт С++
9461 / 5474 / 927
Регистрация: 25.07.2009
Сообщений: 10,498
26.04.2010, 11:01     "Сканирование" текста в файле. #9
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 <string>
 
int main(){
    std::string str("Petya says yes, Vasya says no, Kolya says yes and Vitya says no.");
    std::cout << str << std::endl;
    
    const std::string sYes("yes");
    const std::string sNo("no");
    
    size_t pos = 0, posYes, posNo, npos = std::string::npos;
    while ( pos != npos ){
        posYes = str.find(sYes, pos);
        posNo = str.find(sNo, pos);
        if ( posYes != npos && posNo != npos ){
            if ( posYes < posNo ){
                str.replace(posYes, sYes.length(), sNo);
                pos = ( posYes + sNo.length() < str.length() ) ? posYes + sNo.length() : npos;
            }
            else {
                str.replace(posNo, sNo.length(), sYes);
                pos = ( posNo + sYes.length() < str.length() ) ? posNo + sYes.length() : npos;
            }
        }
        else if ( posYes != npos ){
            str.replace(posYes, sYes.length(), sNo);
            pos = ( posYes + sNo.length() < str.length() ) ? posYes + sNo.length() : npos;
        }
        else if ( posNo != npos ){
            str.replace(posNo, sNo.length(), sYes);
            pos = ( posNo + sYes.length() < str.length() ) ? posNo + sYes.length() : npos;
        }
        else pos = npos;
    }
    std::cout << str << std::endl;
    
    return 0;
}
Есть, правда, одна загвоздка... К примеру слово "yesterday" в "nostreday" превратится...
asd321
Мохаммед Али
127 / 65 / 1
Регистрация: 14.08.2009
Сообщений: 916
26.04.2010, 11:20     "Сканирование" текста в файле. #10
угар надо просто yes no заменить на _yes_ _no_ это пробелы типа.
easybudda
Эксперт CЭксперт С++
9461 / 5474 / 927
Регистрация: 25.07.2009
Сообщений: 10,498
26.04.2010, 11:46     "Сканирование" текста в файле. #11
asd321, а никто не говорил, что yes и no должны пробелами отделяться. Точки, запятые и прочее как учитывать будем?
asd321
Мохаммед Али
127 / 65 / 1
Регистрация: 14.08.2009
Сообщений: 916
26.04.2010, 13:56     "Сканирование" текста в файле. #12
можно написать
C++
1
2
3
4
5
6
7
for()
{
 if (ch in[a..z]) firsbool=false;
if (firsbool) {проверка yes no; 2bool=true;}
if (2bool) 
if (ch in[a..z]) 3bool=false;
}
и встроить это в вышеописанный алгоритм.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2010, 17:18     "Сканирование" текста в файле.
Еще ссылки по теме:

С++ Создать оконную таблицу для корректировки данных в файле формата ".txt" - C++
В файле подробно описано как таблица должна выглядеть. Возможно есть наработки с такими примерами, если нет подскажите в чем копать для...

Удаление "строки" в бинарном файле - C++
есть файл .dat. в нем записаны структуры. я удаляю запись /т е одну из структр/. удаляю записывая на ее место пустую структуру и сохраняю...

Поиск в файле со структурами "Дата" - C++
Заданный файл f, содержащий различные даты. Каждая дата - это число, месяц и год. найти: год с наименьшим номером; все весенние даты;...

Есть числа в файле "student.txt". Нужно считать их в массив и вычислить минимальный элемент массива - C++
помогите пожалуйста с программой в С++

Подсветить последнее слово текста, а в нем все буквы "а" - C++
Помогите написать программу, которая будет подсвечивать последнее слово текста, а в нем все буквы &quot;а&quot;. Имеется в виду, сначала я ввожу...


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

Или воспользуйтесь поиском по форуму:
broken_wings
0 / 0 / 0
Регистрация: 09.01.2010
Сообщений: 10
27.04.2010, 17:18  [ТС]     "Сканирование" текста в файле. #13
accept, дело в том,что мой компилятор не воспринимает string как тип данных (BC++ 3.11).
Yandex
Объявления
27.04.2010, 17:18     "Сканирование" текста в файле.
Ответ Создать тему
Опции темы

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