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

Заменить в строке все вхождения подстроки str1 на подстроку str2 - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.73
liana_23_
 Аватар для liana_23_
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 138
22.02.2012, 19:30     Заменить в строке все вхождения подстроки str1 на подстроку str2 #1
заменить в строке все вхождения подстроки str1 на подстроку str2
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2012, 19:30     Заменить в строке все вхождения подстроки str1 на подстроку str2
Посмотрите здесь:

C++ Написать програму которая заменяет все Enter и Tab в строке str1 на сымволи '\n' и '\t' в строке str2.
Заменить в строке все вхождения одной подстроки на другую C++
Заменить все вхождения str1 на str2 (str1 вводится из файла, а str2 - с клавиатуры) C++
C++ Функцию, которая получает два параметра str1 и str2 типа string и возвращает позицию начала последнего появления str2 в str1
C++ STL. Заменить в строке S все вхождения подстроки S1 на подстроку S2
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
29.02.2012, 16:43     Заменить в строке все вхождения подстроки str1 на подстроку str2 #2
liana_23_, язык С/С++???
liana_23_
 Аватар для liana_23_
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 138
29.02.2012, 17:34  [ТС]     Заменить в строке все вхождения подстроки str1 на подстроку str2 #3
с++
-=ЮрА=-
Заблокирован
Автор FAQ
29.02.2012, 18:12     Заменить в строке все вхождения подстроки str1 на подстроку str2 #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ

Не по теме:

liana_23_, я отлучался, сейчас напаяю не унывайте, попеййте кофейку и через мин 10 заберёте код



Добавлено через 23 минуты
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
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
 
int main()
{
    char text[1024];
    char sBuf[1024];
    char str1[32];
    char str2[32];
    long sLen;
    long sPos;
 
    cout<<"Enter input text(less than 1024 chars)\n";
    cin.getline(text,1024);
    cout<<"Enter str1 : ";
    cin.getline(str1,32);
    cout<<"Enter str2 : ";
    cin.getline(str2,32);
 
    char * s = strstr(text,str1);
    while(s)
    {
        sLen = strlen(text);
        sPos = sLen - strlen(s);
        strcpy(sBuf,s + strlen(str1));
        text[sPos] = '\0';
        strcat(text,str2);
        strcat(text,sBuf);
        s = strstr(text,str1);
    }
    cout<<"String after replacing\n"<<text<<endl;
    system("pause");
    return 0;
}
Я решил не заморачиваться и сделал максимально просто. Если нужно будет по-умней пишите сделаю поинтересней - просто привык что пользователям лучше то что попроще
Миниатюры
Заменить в строке все вхождения подстроки str1 на подстроку str2  
-=ЮрА=-
Заблокирован
Автор FAQ
29.02.2012, 18:25     Заменить в строке все вхождения подстроки str1 на подстроку str2 #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
liana_23_, код ниже использует все достоинства класса 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
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
 
int main()
{
    string text;
    string str1;
    string str2;
    long sPos;
 
    cout<<"Enter input text\n";
    getline(cin,text);
    cin.ignore();
    cout<<"Enter str1 : ";
    getline(cin,str1);
    cin.ignore();
    cout<<"Enter str2 : ";
    getline(cin,str2);
    cin.ignore();
 
    while((sPos = text.find(str1,0)) != string::npos)
        text.replace(sPos,str1.length(),str2);
    cout<<"String after replacing\n"<<text<<endl;
    system("pause");
    return 0;
}
PS:Я писал в 6-й версии студии поєтому если у вас поновей возможно cin.ignore(); не понадобится, чуть позже как будет под рукой 9-ка проверю
liana_23_
 Аватар для liana_23_
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 138
29.02.2012, 19:13  [ТС]     Заменить в строке все вхождения подстроки str1 на подстроку str2 #6
чё то как то всё сложно здесь
-=ЮрА=-
Заблокирован
Автор FAQ
29.02.2012, 22:56     Заменить в строке все вхождения подстроки str1 на подстроку str2 #7
Цитата Сообщение от liana_23_ Посмотреть сообщение
чё то как то всё сложно здесь
- какой именно код вызвал трудности с пониманием???Кстат вод быстрый лаконичный код

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
возможно cin.ignore(); не понадобится,
- как оказалось чутьё меня не подвело, прикрепяю аттачем готовый проект в VisualStudio 9.0
Миниатюры
Заменить в строке все вхождения подстроки str1 на подстроку str2  
Вложения
Тип файла: rar strrepl_proj.rar (4.0 Кб, 64 просмотров)
fedyar1k
Сообщений: n/a
06.12.2012, 21:23     Заменить в строке все вхождения подстроки str1 на подстроку str2 #8
-=ЮрА=-, а можно тоже самое но на языке С?буду очень признателен!
nurtay1994
0 / 0 / 0
Регистрация: 21.04.2013
Сообщений: 12
21.04.2013, 12:50     Заменить в строке все вхождения подстроки str1 на подстроку str2 #9
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Если нужно будет по-умней пишите сделаю поинтересней
по-умней можете написать (просто очень нужно!!)!!
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11828 / 6807 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 2
Завершенные тесты: 1
21.04.2013, 14:41     Заменить в строке все вхождения подстроки str1 на подстроку str2 #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
 
 
int main(){
    setlocale(LC_ALL,"russian");
    std::string str("Заменяем все вхождения ДЛЯ МЕНЯ строки на другую. Не хватает ДЛЯ МЕНЯ рюмки.");
    std::string findstr="ДЛЯ МЕНЯ";
    std::string replacestr="одной";
    std::string::size_type index;
    while((index=str.find(findstr))!=std::string::npos) 
        str.replace(index, findstr.size(), replacestr);
    std::cout<<str<<std::endl;
    return 0; 
}
-=ЮрА=-
Заблокирован
Автор FAQ
21.04.2013, 18:16     Заменить в строке все вхождения подстроки str1 на подстроку str2 #11
Croessmah, в моем посте №6 тот же стринг-риплэйс


Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
while((sPos = text.find(str1,0)) != string::npos)
* * * * text.replace(sPos,str1.length(),str2);
Цитата Сообщение от nurtay1994 Посмотреть сообщение
по-умней можете написать (просто очень нужно!!)!!
- Сойдёт?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void CMFCReplStrDlg::OnReplace() 
{
    // TODO: Add your control notification handler code here
    UpdateData(TRUE);
    if(!m_Input.GetLength())
        AfxMessageBox("Входной текст не сожержит ни единого символа");
    else
    if(!m_What.GetLength())
        AfxMessageBox("Заменяемый текст не введен");
    else
    if(!m_Replace.GetLength())
        AfxMessageBox("Текст для замены не введен");
    else
    {
        m_Output = m_Input;
        m_Output.Replace(m_What, m_Replace);
    }
    UpdateData(FALSE);
}
ЗЫ : Текст взят отсюда http://ru.wikipedia.org/wiki/C%2B%2B
Миниатюры
Заменить в строке все вхождения подстроки str1 на подстроку str2  
Вложения
Тип файла: rar MFCReplStr.exe.rar (3.9 Кб, 4 просмотров)
Тип файла: rar MFCReplStr_proj.rar (22.3 Кб, 8 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2013, 19:28     Заменить в строке все вхождения подстроки str1 на подстроку str2
Еще ссылки по теме:

C++ Заменить в строке все вхождения подстроки str1 на подстроку str2
Функция определяющая наличие символов строки str2 в строке str1 C++

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

Или воспользуйтесь поиском по форуму:
nurtay1994
0 / 0 / 0
Регистрация: 21.04.2013
Сообщений: 12
21.04.2013, 19:28     Заменить в строке все вхождения подстроки str1 на подстроку str2 #12
Большое - пребольшое вам СПАСИИИБООО!!!!!!
Yandex
Объявления
21.04.2013, 19:28     Заменить в строке все вхождения подстроки str1 на подстроку str2
Ответ Создать тему

Метки
str1, str2, вхождения, Заменить, подстроки, подстроку, строке
Опции темы

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