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

Заменить в строке все вхождения abc на 123 - C++

Восстановить пароль Регистрация
 
qlr
22 / 22 / 3
Регистрация: 17.12.2010
Сообщений: 72
06.11.2012, 18:04     Заменить в строке все вхождения abc на 123 #1
Попросили сделать простейшую программку (по информатике), вроде как шарю, но сейчас просто не могу понять, что происходит и почему не работает, перепробовал уже вариантов 10, ничего не помогает. Возникают различные ошибки. Исходное задание: считать строку и заменить все вхождения abc на 123. В коде ниже не считывается переменная строки scanf'ом.
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
#include "stdafx.h"
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <Windows.h>
using namespace std;
 
const int maxsym = 255;
 
int _tmain(int argc, _TCHAR* argv[])
{
    char *str = new char[maxsym];
    for (int i = 0; i < maxsym; i++)
        str[i] = '0';
    cout << "Input string >> ";
    scanf_s("%s",str);
    for (int i = 0; i < strlen(str)-2; i++)
        if ((str[i] == 'a')&&(str[i+1] == 'b')&&(str[i+2] == 'c'))
        {
            str[i] = '1';
            str[i+1] = '2';
            str[i+2] = '3';
        }
    cout << "Result string - " << str;
    cin.get();
    cin.get();
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2012, 18:04     Заменить в строке все вхождения abc на 123
Посмотрите здесь:

Заменить в строке все множественные вхождения заданного символа одним C++
Заменить в строке S1 первые, последнее и все вхождения строки S2 на S3. C++
Заменить в строке S1 первые, последнее и все вхождения строки S2 на S3 C++
C++ Преобразовать строку: все вхождения abc заменить на def
C++ Строка символов. Все вхождения ‘abc’ заменить на ‘def’
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Afflicted
Обитатель форума
199 / 182 / 8
Регистрация: 28.10.2012
Сообщений: 538
06.11.2012, 18:09     Заменить в строке все вхождения abc на 123 #2
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 <string>
#include <sstream>
#include <iostream>
 
int main() 
{
    std::string words = "sssd  dfgh abc ac fsff abc redf wee qq abc  sdds ";
    std::vector<std::string> word;
    {
        std::stringstream ss(words);
        std::copy
        (
            std::istream_iterator<std::string>(ss),
            std::istream_iterator<std::string>(),
            back_inserter(word)
        );
    }
    
    std::replace(word.begin(), word.end(), std::string("abc"), std::string("123"));
    std::copy(word.begin(), word.end(), std::ostream_iterator<std::string>(std::cout," "));
    std::cout << '\n';
 
    return 0;
}
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
06.11.2012, 18:10     Заменить в строке все вхождения abc на 123 #3
Заменить все вхождения строки s2 в строку s1 на строку s3
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
06.11.2012, 18:12     Заменить в строке все вхождения abc на 123 #4
Можно так сделать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream> 
int main() 
{ 
    char buffer[100] = "rrrrrrrrabcgggggabc"; 
    int size = strlen(buffer); 
 
    for ( int i = 0; i < size; i++)   
        if(buffer[i] == 'a' && buffer[i+1] == 'b' && buffer[i+2] == 'c') 
        {
            buffer[i] ='1'; 
            buffer[i+1] = '2'; 
            buffer[i+2] = '3'; 
        } 
 
        std::cout << buffer << std::endl;
}
qlr
22 / 22 / 3
Регистрация: 17.12.2010
Сообщений: 72
06.11.2012, 18:15  [ТС]     Заменить в строке все вхождения abc на 123 #5
Предупреждение 1 warning C4627: #include <string>: пропущен при поиске использования предкомпилированного заголовка f:\ismail\ismail\ismail\ismail.cpp 1 1 ismail
Предупреждение 2 warning C4627: #include <sstream>: пропущен при поиске использования предкомпилированного заголовка f:\ismail\ismail\ismail\ismail.cpp 2 1 ismail
Предупреждение 3 warning C4627: #include <iostream>: пропущен при поиске использования предкомпилированного заголовка f:\ismail\ismail\ismail\ismail.cpp 3 1 ismail
6 IntelliSense: использование имени типа не допускается f:\ismail\ismail\ismail\ismail.cpp 8 17 ismail
7 IntelliSense: идентификатор "word" не определен f:\ismail\ismail\ismail\ismail.cpp 8 30 ismail
5 IntelliSense: namespace "std" не содержит члена "vector" f:\ismail\ismail\ismail\ismail.cpp 8 10 ismail
8 IntelliSense: namespace "std" не содержит члена "replace" f:\ismail\ismail\ismail\ismail.cpp 18 10 ismail
Ошибка 4 error C1010: непредвиденный конец файла во время поиска предкомпилированного заголовка. Возможно, вы забыли добавить директиву "#include "stdafx.h"" в источник. f:\ismail\ismail\ismail\ismail.cpp 25 1 ismail

Добавлено через 1 минуту
Цитата Сообщение от David Sylva Посмотреть сообщение
Можно так сделать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream> 
int main() 
{ 
    char buffer[100] = "rrrrrrrrabcgggggabc"; 
    int size = strlen(buffer); 
 
    for ( int i = 0; i < size; i++)   
        if(buffer[i] == 'a' && buffer[i+1] == 'b' && buffer[i+2] == 'c') 
        {
            buffer[i] ='1'; 
            buffer[i+1] = '2'; 
            buffer[i+2] = '3'; 
        } 
 
        std::cout << buffer << std::endl;
}
это все ок, а как считать мне эту строку?
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
06.11.2012, 18:17     Заменить в строке все вхождения abc на 123 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream> 
int main() 
{ 
    char buffer[100]; 
 
    std::cout << "Inter string " << std::endl; 
    std::cin.getline(buffer, 100); 
    int size = strlen(buffer);
 
    for ( int i = 0; i < size; i++)   
        if(buffer[i] == 'a' && buffer[i+1] == 'b' && buffer[i+2] == 'c') 
        {
            buffer[i] ='1'; 
            buffer[i+1] = '2'; 
            buffer[i+2] = '3'; 
        } 
 
        std::cout << buffer << std::endl;
}
qlr
22 / 22 / 3
Регистрация: 17.12.2010
Сообщений: 72
06.11.2012, 18:20  [ТС]     Заменить в строке все вхождения abc на 123 #7
Цитата Сообщение от David Sylva Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream> 
int main() 
{ 
    char buffer[100]; 
 
    std::cout << "Inter string " << std::endl; 
    std::cin.getline(buffer, 100); 
    int size = strlen(buffer);
 
    for ( int i = 0; i < size; i++)   
        if(buffer[i] == 'a' && buffer[i+1] == 'b' && buffer[i+2] == 'c') 
        {
            buffer[i] ='1'; 
            buffer[i+1] = '2'; 
            buffer[i+2] = '3'; 
        } 
 
        std::cout << buffer << std::endl;
}
грамотно, спасибо)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2012, 18:45     Заменить в строке все вхождения abc на 123
Еще ссылки по теме:

C++ STL. Заменить в строке S все вхождения подстроки S1 на подстроку S2
C++ Заменить в строке все вхождения подстроки str1 на подстроку str2

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

Или воспользуйтесь поиском по форуму:
Vourhey
Почетный модератор
6469 / 2244 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
06.11.2012, 18:45     Заменить в строке все вхождения abc на 123 #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <sstream>
 
int main()
{ 
    std::string a;
    std::string::size_type i = 0;
    std::getline(std::cin, a);
    while((i = a.find("123",i)) != std::string::npos)
        a.replace(i, 3, "abc");
    std::cout<<a<<std::endl;
}
Yandex
Объявления
06.11.2012, 18:45     Заменить в строке все вхождения abc на 123
Ответ Создать тему
Опции темы

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