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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Afar
1 / 1 / 0
Регистрация: 10.10.2012
Сообщений: 14
#1

Построчная обработка string - C++

20.10.2012, 21:44. Просмотров 709. Ответов 6
Метки нет (Все метки)

Есть некий "многострочный" текст string s;. Задача состоит в том, чтобы после каждой строки, кроме последней, после каждого знака ' " ' и ' \ ' поставить ' \ '.
Например из текста:
cout << "123" << endl;
cout << "123\n123\n123132" << endl;

Нужно получить:

cout << \"123\" << endl;\
cout << \"123\\n123\\n123132\" << endl;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2012, 21:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Построчная обработка string (C++):

Обработка строк класса string - C++
Написать программу, считывающую строки, состоящую из слов, разделенных пробелами и знаками препинания, и выводящую в столбик в алфавитном...

Доступ к паре в map<string, vector<pair<string, string>>>Temp - C++
Подскажите пожалуйста как получить данные в векторе пар ? void showData(const map&lt;string, vector&lt;pair&lt;string, string&gt;&gt;&gt;Temp) { ...

Построчная работа программы - C++
Добрый вечер! Большая просьба, объясните, пожалуйста, построчно, работу программы: int main() { int const x = 21; ...

Построчная запись в файл - C++
Написал прогу. Вводится текст с клавиатуры. При нажатии на ентер, переводится на новую строку и записывается в файл. Если пустая строка -...

Построчная запись и считывание из файла - C++
Пытаюсь разобраться - как работать с файлами в C++, элементарные вещи получаются, а вот чуть посложнее и всё.. ничего не выходит... Работал...

Двумерные массивы: построчная перестановка элементов - C++
Решите пожалуйста эту задачку на С++... ...В квадратном массиве содержатся как отрицательные, так и положительные элементы. Если...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
20.10.2012, 21:59 #2
Цитата Сообщение от Afar Посмотреть сообщение
Нужно получить:
Даже не скомпилируется. Да и сомнительно мне, что надо менять escape-последовательности.
Петррр
5949 / 3386 / 337
Регистрация: 28.10.2010
Сообщений: 5,926
20.10.2012, 22:03 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
 
void escape_string(std::string& str)
{
    std::string::size_type size = str.size();
    if (size == 0)
        return;
    for(int i = size - 1; i >= 0; --i)
        if (str[i] == '"' || str[i] == '\\')
            str.insert(i, "\\");
}
 
int main()
{
    std::string str = "\"123\\123\"";
    std::cout << str << std::endl;
    escape_string(str);
    std::cout << str << std::endl;
}
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
20.10.2012, 22:03 #4
левая граница ← 0
правая граница ← 0
результат ← ""
repeat forever
​ ​ ​ ​ ​правая граница ← первое-вхождение(строка, "\"\\", левая граница)
​ ​ ​ ​ ​if ​правая граница = вхождений-не-найдено then
​ ​ ​ ​ ​​ ​ ​ ​ ​результат ← результат + подстрока(строка, левая граница)
​ ​ ​ ​ ​​ ​ ​ ​ ​break
​ ​ ​ ​ ​else
​ ​ ​ ​ ​​ ​ ​ ​ ​результат ← результат + подстрока(строка, левая граница, правая граница – левая граница)
​ ​ ​ ​ ​​ ​ ​ ​ ​результат ← результат + "\"
​ ​ ​ ​ ​​ ​ ​ ​ ​левая граница ← правая граница
​ ​ ​ ​ ​end if
end repeat
return результат

первое-вхождение(строка, разделители, индекс) возвращает индекс первого вхождения в строку любого из разделителей, начиная с индекса (включительно). Если вхождений нет, то возвращается специальное значение вхождений-не-найдено.

подстрока(строка, индекс) возвращает подстроку строки от индекса до конца.

подстрока(строка, индекс, длина) возвращает подстроку строки от индекса до достижения индекса (индекс + длина – 1) или конца (в зависимости от того, что ближе).

Найти соответствующие методы std::string и реализовать алгоритм — домашнее задание. Вперёд.



Ну вот :( Всё взяли и испортили.
Afar
1 / 1 / 0
Регистрация: 10.10.2012
Сообщений: 14
20.10.2012, 22:04  [ТС] #5
Цитата Сообщение от soon Посмотреть сообщение
Даже не скомпилируется. Да и сомнительно мне, что надо менять escape-последовательности.
А мне и не надо, чтобы это компилировалось.
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
20.10.2012, 22:06 #6
Цитата Сообщение от Afar Посмотреть сообщение
А мне и не надо, чтобы это компилировалось.
А толку тогда изображать из этого "С++ код"? И, да, жду ответа про escape-последовательности.
Afar
1 / 1 / 0
Регистрация: 10.10.2012
Сообщений: 14
20.10.2012, 22:14  [ТС] #7
Цитата Сообщение от Петррр Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
 
void escape_string(std::string& str)
{
    std::string::size_type size = str.size();
    if (size == 0)
        return;
    for(int i = size - 1; i >= 0; --i)
        if (str[i] == '"' || str[i] == '\\')
            str.insert(i, "\\");
}
 
int main()
{
    std::string str = "\"123\\123\"";
    std::cout << str << std::endl;
    escape_string(str);
    std::cout << str << std::endl;
}
Спасибо!

Добавлено через 4 минуты
Цитата Сообщение от soon Посмотреть сообщение
А толку тогда изображать из этого "С++ код"? И, да, жду ответа про escape-последовательности.
Я делаю автоматическую генерацию кода на C++. То есть при добавлении в файл вот этого:

cout << \"123\" << endl;\
cout << \"123\\n123\\n123132\" << endl;

Получится вполне себе компилирующийся код:


cout << "123" << endl;
cout << "123\n123\n123132" << endl;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2012, 22:14
Привет! Вот еще темы с ответами:

Заполнение двумерного массива случайными числами, его построчная сортировка - C++
Написать функцию который принимает двумерный масив заполненый случайными цифрами и сортирует его по строчьно.

Какое одинаковое значение можно вернуть из функций <string> f () и vector < <string> > f()? - C++
Понятное дело, что всё обсуждение будет вертеться вокруг аналога NULL. char* f_0 () { return NULL; } char** f_1 () { ...

Как преобразовать char* в string и вывести переменную string на экран? - C++
for (int k = 0; k &lt; 10; k++) { int x = (int)rand() / RAND_MAX + rand() % 6 + 2; char *chars = new char; ...

Как используя C-String а потом и String class варьировать вывод? - C++
Дана задача: при вводе полного И.О.Ф. (в таком порядке) выводить Ф, И и О(только первую букву и .). И если О не задано - выводить только...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.10.2012, 22:14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru