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

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

Восстановить пароль Регистрация
 
JiryPK
1 / 1 / 0
Регистрация: 13.11.2010
Сообщений: 17
22.05.2012, 19:02     Заменить в тексте каждое вхождение... #1
Заменить в тексте каждое вхождение константы "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 минут
Подъкиньте хоть какую-нибудь идею...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 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;
}
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     Заменить в тексте каждое вхождение...
Ответ Создать тему
Опции темы

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