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

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

Войти
Регистрация
Восстановить пароль
 
JiryPK
1 / 1 / 0
Регистрация: 13.11.2010
Сообщений: 17
#1

Заменить в тексте каждое вхождение... - C++

22.05.2012, 19:02. Просмотров 476. Ответов 3
Метки нет (Все метки)

Заменить в тексте каждое вхождение константы "1" словом "odin". Предполагается, что текст записан в файле input.txt. Результат выводится на экран. Задание выполнить в двух вариантах: со строками типа string и char.

Со 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
#include<string>
#include<iostream>
#include<fstream>
 
using namespace std;
 
class String
{
    public:
        string str1,str2,str3;
 
        void Funct();
};
 
void String::Funct()
{
    ifstream fin("input.txt");
    ofstream fout("output.txt");
 
    str1="1";
    str2="odin";
    
    while(!fin.eof()) 
    {
        getline(fin,str3);
        
         if(str3.find(str1)<4000)
         {
               str3.replace(str3.find(str1),str1.size(),str2);
               fout << str3 << endl;
         }
         else
           fout << str3 << endl;    
        cout << str3 <<endl;
 
    }
}
int main()
{
      String s;
     
      s.Funct();
 
      return 0;
}
а вот с char проблема - не получается сместить символы так, чтоб слово "odin" не захватвало следующее слово.
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
#include "stdafx.h"
#include<iostream>
#include<fstream>
 
using namespace std;
 
class Char
{
    private:
        char *wd1, *wd2, *sl1, *sl2;
    public:
        Char(char *w1="a", char *s1="a"):wd1(w1), sl1(s1){}
 
        void Funct(ifstream &in);
};
 
void Char::Funct(ifstream &in)
{
    int size, p;
 
 
    in.clear();
    in.seekg(0, ios::end);
    size = in.tellg();
    in.seekg(0, ios::beg);
//  cout<<"size = "<<size<<endl;
    char *str = new char[size];
 
    p=size;
    
    memset(str, 0, size);
    in.read(str, size);
 
    for(int i=0; i<size; i++)
    {
        if(str[i]==sl1[0])
        {   
            p=i;
            str[i]=wd1[0];
            //i=i+4;
            int j=i;
            int count = 0;
            for(j=i; j<(i+4); j++)
                str[j] = wd1[count++];
        }
    }
 
    cout<<endl<<endl<<"Си строки типа char:"<<endl;
    cout<<"------------------------------------------"<<endl;
    cout << str << endl;
    //cout << p << endl;
 
    delete[]str;
    in.close();
}
Добавлено через 4 часа 49 минут
Подъкиньте хоть какую-нибудь идею...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2012, 19:02     Заменить в тексте каждое вхождение...
Посмотрите здесь:

Заменить каждое вхождение <i> на <курсив>, а каждое вхождение </i> на <конец курсивах> - C++
Тэг курсива. Дан текст, в котором встречаются структуры &lt;i&gt; и &lt;/i&gt;. Заменить каждое вхождение &lt;i&gt; на &lt;курсив&gt;, а каждое вхождение &lt;/i&gt;...

Заменить в числе каждое вхождение одной цифры на другую - C++
Дано число n, а также цифры a и b. Заменить в этом числе каждое вхождение цифры a на цифру b. Входные данные 123118 1 5 Выходные...

Удвоить каждое вхождение символа C в строку S - C++
Дана строка S и символ C. Удвоить каждое вхождение символа C в строку S. Помогите плиз написать программу с помощью функций.

Удвоить каждое вхождение символа С в строку S - C++
Дана строка S и символ С. Удвоить каждое вхождение символа С в строку S.

Удалить из строки каждое вхождение подстроки - C++
Удалить из строки s каждое вхождение подстроки s1. На С++ Дублирование тем запрещено правилами форума (п. 3.4). Не плодите...

Удвоить каждое вхождение символа в строке - C++
Дана строка s и c символ . Удвойте каждое вхождение символа c в строке s подскажите пожалуйста как решить. Добавлено через 10 минут ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AncinetHero
49 / 49 / 3
Регистрация: 22.05.2011
Сообщений: 326
22.05.2012, 19:16     Заменить в тексте каждое вхождение... #2
Читаешь посимвольно и выводишь тот же символ. Когда считал "1" выводишь то, что надо. Строки вообще не нужны.

Добавлено через 1 минуту
Если уж очень нужен массив чаров, тогда опять таки считуй посимвольно и храни отдельно индекс, где хранится последний символ. Когда считал "1" вставляй 4 новых символа "o d i n" и увеличивай индекс не на 1, а на 4 .
igorrr37
1644 / 1272 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
22.05.2012, 19:31     Заменить в тексте каждое вхождение... #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <fstream>
 
int main()
{
    std::fstream ifs("1.txt", std::ios::in), ofs("2.txt", std::ios::out);
    if(ifs.is_open() && ofs.is_open())
    {
        char c, *p = "one";
        while(ifs.get(c))
        {
            '1' == c ? ofs << p : ofs << c;
        }
    }
    else std::cerr << "Unable to open file(s)\n";
    ifs.close();
    ofs.close();
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2012, 21:46     Заменить в тексте каждое вхождение...
Еще ссылки по теме:

Удвоить каждое вхождение заданной буквы в строке - C++
Помогите пожалуйста) ^_^ Удвоить каждое вхождение заданной буквы в строке.

Сформировать файл h, заменив каждое вхождение слова «это» на слово «то» - C++
Задача: Дан текстовый файл f. Сформировать файл h, заменив каждое вхождение слова «это» на слово «то». Слова – группы символов, разделенные...

Дан символ C и строка S .Удвоить каждое вхождение символа С в строку S - C++
Обработка символьных массивов с помощью указателей: Дан символ C и строка S .Удвоить каждое вхождение символа С в строку S Для...

Дан символ и строка, удвоить каждое вхождение символов в строку - C++
Дан символ и строка, удвоить каждое вхождение символов в строку! кто может помочь?) помогите пожалуйста!

Дан символ и строка, удвоить каждое вхождение символов в строку!!!! - C++
помогите реализовать данную прогу на СИ)

Удвоить вхождение некоторой буквы в тексте. - C++
Помогите пожалуйста решить задачи 2.Удвоить вхождение некоторой буквы в тексте. Например, текст &quot;banana&quot; должен иметь вид...


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

Или воспользуйтесь поиском по форуму:
JiryPK
1 / 1 / 0
Регистрация: 13.11.2010
Сообщений: 17
22.05.2012, 21:46  [ТС]     Заменить в тексте каждое вхождение... #4
Спасибо огромное!!!

Добавлено через 1 час 29 минут
а не подскажите как переделать под тип wchar_t - а то в функции ifs.get(c) ошибка

Добавлено через 33 минуты
спасибо, сам разобрался
Yandex
Объявления
22.05.2012, 21:46     Заменить в тексте каждое вхождение...
Ответ Создать тему
Опции темы

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