С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
3 / 3 / 4
Регистрация: 03.03.2015
Сообщений: 51

Из строки вывести некоторые элементы в новую строку

22.11.2015, 22:57. Показов 1252. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть строка string:
C++
1
2
3
qqq-www
aaa-sss
zzz-xxx
Должно получиться:
C++
1
2
3
qqq
aaa
zzz
Тоже типа string.
Как это реализовать - не знаю. Пробовал и как-то через strchr и просто циклами искал, что-то не получалось...
Даже гугл, на удивление, не помог .-.

Добавлено через 27 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
string str = "qqq-www\naaa-sss\nzzz-\nxxx";
    cout << str<< endl;
    string base;
    int j = 0;
    for (int i = 0; i < str.length(); i++){
        if (str[i] != '-'){
            base[j] = str[i];
            j++;
        } else{
            while(str[i] != '\n' || str[i] != '\0'){
                i++;
            }
        }
 
    }
    cout << base << endl;
Вот, что у меня вышло, но код не работает

Добавлено через 6 минут
Видимо, так можно делать только со строками char, но все равно, у меня "не видит" \n...

Добавлено через 27 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
char str[24] = "qqq-www\naaa-sss\nzzz-xxx";
    char *base;
    base = new char;
    int j = 0;
    for (int i = 0; i < 24; i++){
        if (str[i] != '-'){
            base[j] = str[i];
            j++;
        } else{
            base[j] = '\n';
            j++;
            do{
                i++;
                if ((str[i] == '\n') || (str[i] == '\0')){
                    break;
                }
            }while(1);
        }
 
    }
    cout << "\n" << base << endl;
Получил такой код. Только в конце какая-то какашка...


C++
1
2
3
4
qqq
aaa
zzz
Ююю
Видимо, выделяется памяти больше, чем необходимо...
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.11.2015, 22:57
Ответы с готовыми решениями:

Определить в строках элементы, которые совпадают и из них вывести новую строку
Ребята помогите!!!! Задание: дано 2 строки, определить в них елементы(буквы), которые совпадают и из них вывести новую строку!!!!!

Строки: вывести в новую строку только те слова, длина которых нечетна
Дано предложение, в котором слова разделены пробелами. Вывести в новую строку только те слова, длина которых нечетна.

Вводят строку. Найти в ней все слова с буквой "Z" и переместить их в другую строку. Вывести новую строку
Недавно начал изучать этот язык. Было все не плохо, но тут учитель решил поставить меня в тупит такой задачей... Вводят строку. Найти в...

6
 Аватар для Vaiz
104 / 98 / 40
Регистрация: 01.07.2012
Сообщений: 277
22.11.2015, 23:04
Лучший ответ Сообщение было отмечено Анатолий228 как решение

Решение

В while нужно было использовать '&&', и не искать символ конца строки, а сравнивать с длиной
ну и так, по мелочи еще поправил

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    string str = "qqq-www\naaa-sss\nzzz-xxx";
    cout << str << endl << "==================" << endl;
    string base;
 
    for (int i = 0; i < str.length(); i++)
    {
        if (str[i] != '-')
            base += str[i];
        else
        {
            while(str[i] != '\n' && i < str.length())
                i++;
            base += '\n';
        }
    }
    cout << base << endl;
1
14 / 14 / 1
Регистрация: 14.03.2015
Сообщений: 113
22.11.2015, 23:06
а base завершить не нужно?
1
 Аватар для Vaiz
104 / 98 / 40
Регистрация: 01.07.2012
Сообщений: 277
22.11.2015, 23:09
fitochay, это string. Он сам следит за концом строки. Кстати, в вашем варианте данные туда даже не заносились (base[j] = str[i].
0
3 / 3 / 4
Регистрация: 03.03.2015
Сообщений: 51
22.11.2015, 23:13  [ТС]
Вот, что вышло у меня. Да, нужно было указать конец строки)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    char str[24] = "qqq-www\naaa-sss\nzzz-xxx";
    char *base;
    base = new char;
    int j = 0;
    for (int i = 0; i < 24; i++){
        if (str[i] != '-'){
            base[j] = str[i];
            j++;
        } else{
            base[j] = '\n';
            j++;
            do{
                i++;
                if ((str[i] == '\n') || (str[i] == '\0')){
                    break;
                }
            }while(1);
        }
        if (i == 23){
            base[j] = '\0';
        }
    }
    cout << "\n" << base << endl;
Добавлено через 3 минуты
А, понял. Пришлось помучаться с этим целый час из-за невнимательности, считай)
0
14 / 14 / 1
Регистрация: 14.03.2015
Сообщений: 113
22.11.2015, 23:15
Vaiz, дык дан изначально чар. смысл переделывать, если можно просто конец воткнуть
0
 Аватар для Vaiz
104 / 98 / 40
Регистрация: 01.07.2012
Сообщений: 277
22.11.2015, 23:27
Цитата Сообщение от fitochay Посмотреть сообщение
Vaiz, дык дан изначально чар. смысл переделывать, если можно просто конец воткнуть
Сначала был стринг. Я и не заметил, что вы его заменили.
Вообще советую пользоваться string, раз уж начали, сырой char редко кто использует в серьезных программах.

Добавлено через 8 минут
P.S. Еще и не заметил, что с разными людьми разговариваю)
Ставьте аватарки
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.11.2015, 23:27
Помогаю со студенческими работами здесь

Создать новую строку из символов 1-ой заданной строки, которые не входят во вторую заданную строку
Pascal:Создать новую строку из символов 1-ой заданной строки, которые не входят во вторую заданную строку.

Для заданной строки сформировать новую строку, состоящую только из цифр, входящих в начальную строку
Функция записи и тестирования, которая для заданной строки формирует новую строку, состоящую только из цифр, входящих в начальную строку....

Заданы две строки. Построить новую строку, состоящую из символов, которые входят как в одну, так и в другую строку
Прошу помощи!

Выбрать строку с наибольшей суммой элементов и вывести элементы этой строки в вектор
Задана матрица Z(6,5). Выбрать строку с наибольшей суммой элементов и вывести элементы этой строки в вектор, затем каждый...

Из строки сформировать новую строку, содержащую символы цифр исходной строки
Из введенной символьной строки выбрать все цифры и сформировать другую строку из этих цифр, сохранив их последовательность.


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru