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

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

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

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

17.04.2010, 21:52. Просмотров 1119. Ответов 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();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2010, 21:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос "Сканирование" текста в файле. (C++):

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

Дан текст, хранящийся в текстовом файле f, каждый символ которого может быть малой буквой, цифрой или одним из знаков "+", "-", "*". - C++
Дан текст, хранящийся в текстовом файле f, каждый символ которого может быть малой буквой, цифрой или одним из знаков &quot;+&quot;, &quot;-&quot;, &quot;*&quot;. Групой...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Может ли MSXML в XML файле найти все вхождения "123" в значениях атрибутов элементов и заменить их на "321"? - C++
Всем доброго времени суток. Столкнулся со странноватой задачей, но что-то застрял с ней, т.к. использую либу MSXML. Собственно смыл:...

Удалить из текста все слова, оканчивающиеся группой букв "ing" и "ed" - C++
Помогите пожалуйста с задачей на массив слов: Дан текст. Удалить все слова, оканчивающиеся группой букв ing и ed.

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

12
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
21.04.2010, 06:52 #2
это надо двигаться по строке и, если встречено слово, то проверить, равно ли оно yes, если равно, то заменить его на no, а если оно не равно yes, то проверить не равно ли оно no, если равно, заменить на yes, иначе двигаться дальше
тут нельзя юзать быстрые методы типа найти слово и заменить его, так как изменённые слова снова будут меняться
если юзаешь strtok() - потеряешь разделители, так как она обнуляет их (и потом не различишь какие там были разделители, сколько их там было)
1
broken_wings
0 / 0 / 0
Регистрация: 09.01.2010
Сообщений: 10
21.04.2010, 20:16  [ТС] #3
accept, а не могли бы дать пример какой-нибудь?
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
22.04.2010, 05:09 #4
там на C++ быстрее получится, вроде, через string
если задание - просто заменить слова, без учёта разделителей
0
broken_wings
0 / 0 / 0
Регистрация: 09.01.2010
Сообщений: 10
22.04.2010, 23:52  [ТС] #5
accept, string у меня - простая переменная,если вы об этом)
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
23.04.2010, 10:42 #6
не, я про тип в C++, который называется string
там можно строки складывать, сравнивать a += b, a == b, делать замену, превращать в потоки (и читать их, как файловые потоки читаешь)
0
broken_wings
0 / 0 / 0
Регистрация: 09.01.2010
Сообщений: 10
25.04.2010, 13:56  [ТС] #7
accept, ну а примером к моему коду не поделитесь?)
0
accept
4822 / 3243 / 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;
}
0
easybudda
Модератор
Эксперт CЭксперт С++
9663 / 5613 / 952
Регистрация: 25.07.2009
Сообщений: 10,777
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" превратится...
0
asd321
Мохаммед Али
127 / 65 / 1
Регистрация: 14.08.2009
Сообщений: 916
26.04.2010, 11:20 #10
угар надо просто yes no заменить на _yes_ _no_ это пробелы типа.
0
easybudda
Модератор
Эксперт CЭксперт С++
9663 / 5613 / 952
Регистрация: 25.07.2009
Сообщений: 10,777
26.04.2010, 11:46 #11
asd321, а никто не говорил, что yes и no должны пробелами отделяться. Точки, запятые и прочее как учитывать будем?
0
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;
}
и встроить это в вышеописанный алгоритм.
0
broken_wings
0 / 0 / 0
Регистрация: 09.01.2010
Сообщений: 10
27.04.2010, 17:18  [ТС] #13
accept, дело в том,что мой компилятор не воспринимает string как тип данных (BC++ 3.11).
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2010, 17:18
Привет! Вот еще темы с ответами:

В текстовом файле заменить все лова начинающиеся с буквы "а" на первое место, которое начинается с буквы "с" - C++
ЗАВТРА ЭКЗАМЕН И НЕ РЕШИЛА ЭТУ ЗАДАЧУ! НЕ ЗНАЮ КАК! ели знаете как ее решить-решите, очень надо! В текстовом файле заменить все лова...

В каждом слове текста замените "а" на букву "е" - C++
В каждом слове текста замените &quot;а&quot; на букву &quot;е&quot;, если &quot;а&quot; стоит на четном месте, и заменить букву &quot;б&quot; на сочетание &quot;ак&quot;, если &quot;б&quot; стоит на...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс" - C++
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об издании, а также определить является ли данное...

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания" - C++
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько лет книге и количество дней прошедших...


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

Или воспользуйтесь поиском по форуму:
13
Yandex
Объявления
27.04.2010, 17:18
Ответ Создать тему
Опции темы

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