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

Заменить все последовательности символов 'on' на 'online' - C++

Восстановить пароль Регистрация
 
Zhuka
Сообщений: n/a
17.04.2010, 20:11     Заменить все последовательности символов 'on' на 'online' #1
Дана символьная строка. Заменить все последовательности символов 'on' на 'online' и вывести новую строку (если искомой последовательности в строке нет, то вывести соответствующее сообщение).

Добавлено через 3 минуты
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
#include <iostream>
#include <iomanip>
#include <cmath>
#include <cstring>
using namespace std;
 
void Method(char *mas){
    for(int i = 0; i < 100; i++){
        if(mas[i]=='o' && mas[i+1]=='n'){
            mas[i]="online";
        }
    }
    for(int i = 0; i < 100; i++){
        cout<<mas[i];
    }
}
int main(){
    char *mas = new char[100];
    cout<<"enter>";
    cin.getline(mas,100);
    Method(mas);
    delete[] mas;
    return 0;
}
я вот так написал... но у меня ошибки!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2010, 20:11     Заменить все последовательности символов 'on' на 'online'
Посмотрите здесь:

C++ Посчитать сколько слов в строке начинается с буквы "т" 2. Ввести фразу. Все последовательности одинаковых символов заменить на выражение N(C)
Заменить в последовательности символов после первого вхождения знака ‘+’ все цифры на символ – C++
C++ В последовательности X1, . . ., Xn все члены, меньшие двух, заменить нулями
C++ Строка символов. Все вхождения ‘abc’ заменить на ‘def’
найти последовательности символов произвольной длины, которые повторяются и заменить их кодами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Demihalf
Унылый школьник
 Аватар для Demihalf
126 / 60 / 3
Регистрация: 06.11.2009
Сообщений: 354
17.04.2010, 21:03     Заменить все последовательности символов 'on' на 'online' #2
Цитата Сообщение от Zhuka Посмотреть сообщение
mas[i]="online";
Страшная ересь, вы пытаетесь присвоить символу массив символов <_>
Zhuka
Сообщений: n/a
17.04.2010, 21:05     Заменить все последовательности символов 'on' на 'online' #3
а как можно ещё написать?
Demihalf
Унылый школьник
 Аватар для Demihalf
126 / 60 / 3
Регистрация: 06.11.2009
Сообщений: 354
17.04.2010, 21:33     Заменить все последовательности символов 'on' на 'online' #4
Zhuka, ну например так...
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
#include <iostream>
#include <cstring>
using namespace std;
 
char * replaceOn(char *str) {
    size_t len = strlen(str);
    char *str2 = new char[strlen(str) * 3];
    int i = 0;
    while (*str) {
        if (*str == 'o' && *(str + 1) == 'n') {
            strcat(str2, "online");
            i += 6;
            str += 2;
        }
        else {
            *(str2 + i) = *str;
            i++;
            str++;
        };
 
    };
    if (strlen(str2) == len)
        cout << "Combination is not found" << endl;
    else
        str = str2;
    delete[] str2;
 
    return str;
}
 
int main() {
    char *str = new char[101];
    cin.getline(str, 100);
    str = replaceOn(str);
    cout << str << endl;
    delete[] str;
    system("pause");
    return 0;
}
а вообще, удобнее и православнее было бы использовать string...
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
17.04.2010, 21:51     Заменить все последовательности символов 'on' на 'online' #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
    
int main(){
    std::string s = "on abc on def on ghi";
    std::cout << s << std::endl;
    std::string ch_from = "on";
    std::string ch_to = "online";
    size_t pos = 0;
    while ( ( pos = s.find(ch_from, pos) ) != std::string::npos ){
        s.replace(pos, ch_from.size(), ch_to);
        pos += ch_to.size();
    }
    std::cout << s << std::endl;
    return 0;
}
Demihalf
Унылый школьник
 Аватар для Demihalf
126 / 60 / 3
Регистрация: 06.11.2009
Сообщений: 354
17.04.2010, 22:28     Заменить все последовательности символов 'on' на 'online' #6
Хм, мой код адекватно работает только в Builder'е... VS выдает вообще какую-то чушь, MinGW что-то более или менее...

Добавлено через 14 минут
Теперь вроде бы все в порядке...

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 <iostream>
#include <cstring>
using namespace std;
 
char * replaceOn(char *str) {
    size_t len = strlen(str);
 
    char *str1 = new char[strlen(str)];
    strcpy(str1, str);
    char *str2 = new char[strlen(str) * 3];
    strcpy(str2, "");
 
    int i = 0;
    while (*str) {
        if (*str == 'o' && *(str + 1) == 'n') {
            strcat(str2, "online");
            i = strlen(str2);
            str += 2;
        }
        else {
            *(str2 + i) = *str;
            *(str2 + i + 1) = '\0';
            i = strlen(str2);
            str++;
        };
 
    }
    *(str2 + i) = '\0';
    if (strlen(str2) == len) {
        cout << "Combination is not found" << endl;
        return str1;
    }
    else
        return str2;
}
 
int main() {
    char *str = new char[101];
    cin.getline(str, 100);
    str = replaceOn(str);
    cout << str << endl;
    delete[] str;
    system("pause");
    return 0;
}
Yandex
Объявления
17.04.2010, 22:28     Заменить все последовательности символов 'on' на 'online'
Ответ Создать тему
Опции темы

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