С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/12: Рейтинг темы: голосов - 12, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 25.07.2019
Сообщений: 42
1

Заменить в строке слово но при этом не затрагивая слово в кавычках

28.07.2019, 00:24. Показов 2286. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем цель такая: заменить в строке слово но при этом не затрагивая слово в кавычках
Целый день с этим мучаюсь
компилятор gcc

Пример работы:

вход: hello "hello test" hello

выход: world "hello test" world
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.07.2019, 00:24
Ответы с готовыми решениями:

В тексте заменить слово А(любое слово) на слово В(любое слово). А и В разной длинны
Не могу сообразить как написать программу: Пользователь вводит текст Необходимо замениь слово...

Заменить слово в строке
Пользователь записывает строку в динамический массив. После этого вводит слово, которое он хочет...

Заменить заданное слово в тексте, находящемся в заданном файле, на другое слово.
Заменить заданное слово в тексте, находящемся в заданном файле, на другое слово.

Вывести слово в кавычках
Столкнулась с совершенно простой проблемой, но не знаю как её решить! У меня есть слово вот...

4
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,970
Записей в блоге: 29
28.07.2019, 01:21 2
Я бы конечный автомат написал. Хотя наверное можно готовые библиотечные парсеры заюзать, которые умеют строковые токены в кавычках отдельно выделять

Добавлено через 20 минут
Хотя можно тупо по кавычкам строку разбить и менять в нечетных позициях
Lisp
1
2
3
4
5
6
7
8
9
(defn f [s regex subst]
  (->>
   (str/split s #"\"")
   (map #(%1 %2) (cycle [#(str/replace % (re-pattern regex) subst) #(str "\"" % "\"")]))
   (apply str)))
 
(f "  hello zazaza hello \"hello hello test\" hello zazaza" "hello" "world")
 
=> "  world zazaza world \"hello hello test\" world zazaza"
Добавлено через 32 минуты
А вообще я тебе вариант-огонь нашел! И как раз про С++

1. Идешь сюда http://coliru.stacked-crooked.com/

2. Стираешь весь код, набираешь вместо него свой пример:
C++
1
2
3
# define hello world
 
  hello zazaza hello "hello hello test" hello zazaza
3. В самом низу убираешь дефолтные опции компилятора и выставляешь такие
Код
g++ -std=c++17 -O2 -pthread main.cpp -E -P
4. Жмаешь "Компиле, линк энд ран"

5. Профит!

Пруф http://coliru.stacked-crooked.... dd7a024667

ЗЫ
0
1 / 1 / 0
Регистрация: 25.07.2019
Сообщений: 42
28.07.2019, 13:27  [ТС] 3
Пример хороший но это немного не то. В том плане что что-бы вывести готовую строку надо написать 'g++ -std=c++17 -O2 -pthread main.cpp -E -P' ))
0
260 / 165 / 54
Регистрация: 03.05.2019
Сообщений: 339
28.07.2019, 18:07 4
Лучший ответ Сообщение было отмечено daneil9 как решение

Решение

Попробуйте:
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
#include <iostream>
#include <string>
#include <sstream>
#include <Windows.h>
using namespace std;
 
inline void Add(string& text, string& add) // - функция дополнения строки
{
    if (text.empty()) // - если строки пустая
        text += add;
    else
    {
        text += ' ';
        text += add;
    }
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    string text, word, buffer;
    cout << "Введите текст: ";
    getline(cin, text);
    cout << "Введите слово: ";
    getline(cin, word);
 
    istringstream flow(text); // - формируем поток со строки (данные уже отдельно в потоке, независимо от самой строки)
    text.clear(); // - очищаем строку
    
    while (flow >> buffer)
    {
        if (buffer[0] == '"') // - если найдено начало диапазона
        {
            Add(text, buffer);
            while (buffer.back() != '"') // - пока не найдено окончание диапазона
            {
                flow >> buffer;
                text += ' ';
                text += buffer;
            }
        }
        else
            Add(text, word);
    }
    cout << text;
 
    return 0;
}
1
844 / 647 / 323
Регистрация: 24.02.2017
Сообщений: 2,288
28.07.2019, 22:37 5
Лучший ответ Сообщение было отмечено daneil9 как решение

Решение

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
#include <iostream>
using namespace std;
 
int main()
{
    string s="hello  \"hello test\" hello";
    size_t a,b,i=0;
 
    a=s.find('"');
    b=s.find('"',a+1);
 
    while(1){
      i=s.find("hello",i);
      if(i>a)break;
      s.replace(i,strlen("hello"),"world");
    }
    i=b;
    while(1){
    i=s.find("hello",i);
    if(i>s.length())break;
    s.replace(i,strlen("hello"),"world");
    }
    cout<<s<<"\n";
   system("pause");
   return 0;
}
1
28.07.2019, 22:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.07.2019, 22:37
Помогаю со студенческими работами здесь

Дана строка, заменить слово min на слово max
#include &lt;stdio.h&gt; int main() { int n = 81; char str; int i; gets(str);

Заменить предпоследнее слово в строке звездочками
Составить программу на языке С++ для обработки строк с использованием файлов и указателей....

Ввести строку и слово. Вставить введенное слово за пятым словом в строке
Помогите ребят. Нужно написать программу на С++ без использования библиотек &lt;ctype.h&gt;, &lt;string.h&gt;...

В тексте заменить слово «Петя» на слово «Игорь»
Если в строке содержится слово «Петя», заменить его на слово «Игорь». Не используя replace и string.


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru