Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
LitVi
0 / 0 / 0
Регистрация: 10.07.2017
Сообщений: 11
1

Не могу разделить строку на подстроки

10.07.2017, 08:33. Просмотров 910. Ответов 8
Метки нет (Все метки)

Видимо я совсем дебил, но я не понимаю в чем проблема и почему не работает. Числовое выражение начинается с "=", например, "=345+57", чтобы его решить, я хотела разделить строку на числовые подстроки, преобразовать их в int, и потом уже сложить, но, по непонятной мне причине, в подстроку ничего не сохраняется, в чем проблема, не знаю. Помогите пожалуйста(
C++
1
2
3
4
5
for(int i=0;i<str.size();i++){
            if((str[i]>='0')&&(str[i]<='9')) st0[i-1]=str[i];
            else break; 
            
        }
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2017, 08:33
Ответы с готовыми решениями:

Разделить строку на две подстроки.
Доброго времени суток.. В задании необходимо разбить исходную строку на две подстроки, при этом...

Как разделить строку на подстроки
Здравствуйте, возник вопрос по парсингу строк в c++... Как разделить строку на подстроки по ид ?...

Разбить строку на все "связные" подстроки. Получившиеся подстроки записать в вектор
Нужно разбить минимальную строку на &quot;связные&quot; подстроки Например: строка Mas: &quot;qwe&quot; нужны...

Разделить строку на подстроки
Необходимо разделить строку на подстроки через разделитель, но необходимо взять еще один символ...

Разделить строку на подстроки
Даны две строки с произвольным текстом и символами разделителями ,подскажите как символами...

8
AmbA
32 / 15 / 5
Регистрация: 09.06.2017
Сообщений: 95
Записей в блоге: 2
10.07.2017, 08:41 2
Меня вот это смущает:
st0[i-1]=str[i];
st0[i-1]
0-1
Минус первый элемент?
0
LitVi
0 / 0 / 0
Регистрация: 10.07.2017
Сообщений: 11
10.07.2017, 08:48  [ТС] 3
AmbA, ой хд, там цикл с единицы начинается, эт я шаманила, пыталась понять, что не так, но даже если поменять, все равно не работает(
0
oldnewyear
419 / 416 / 158
Регистрация: 21.05.2016
Сообщений: 1,325
10.07.2017, 09:14 4
Цитата Сообщение от LitVi Посмотреть сообщение
Числовое выражение начинается с "="
Тогда условие не выполняется и сразу break
C++
1
2
if((str[i]>='0')&&(str[i]<='9')) st0[i-1]=str[i];
else break;
0
10.07.2017, 09:14
afront
1063 / 1008 / 754
Регистрация: 29.02.2016
Сообщений: 3,197
10.07.2017, 09:18 5
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
#include <iostream>
#include <string>
#include <vector>
 
using namespace std; // я ленивый, да
 
void split(const string& source, const string& delimiters, vector<string>& result)
{
    // поддерживаем следующий инвариант: символ по индексу есть начало нового куска
    // пропускаем разделители в начале
    auto start = source.find_first_not_of(delimiters);
    while (start != string::npos)
    {
        // ищем следующий конец куска
        auto end = source.find_first_of(delimiters, start);
        // и его длину
        auto len = end == string::npos ? string::npos : (end - start);
        // запоминаем найденный кусок
        result.push_back(source.substr(start, len));
        // и переходим к следующему
        start = source.find_first_not_of(delimiters, end);
    }
}
 
int main()
{
    vector<string> result;
    split("=345+57","=+",result);
    int sum = 0;
    for (auto& r : result)
        sum += stoi(r);
        cout << sum << endl;
    return 0;
}
0
LitVi
0 / 0 / 0
Регистрация: 10.07.2017
Сообщений: 11
10.07.2017, 09:22  [ТС] 6
oldnewyear,
Цитата Сообщение от LitVi Посмотреть сообщение
цикл с единицы начинается
там опечатка
0
AmbA
32 / 15 / 5
Регистрация: 09.06.2017
Сообщений: 95
Записей в блоге: 2
10.07.2017, 09:40 7
Лучший ответ Сообщение было отмечено LitVi как решение

Решение

Ну правильно. st0-то у вас нулевая. Аутофрэндж и происходит.
Полностью я задачу не решил, но начало вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
int main()
{
    std::string str{ "=347+58" };
    std::string st0;
    
    for(int i = 0; i < str.size(); i++)
    {
        if (isdigit(str[i]))
            st0 += str[i];
    }
    std::cout << st0 << std::endl;
    return 0;
}
1
LitVi
0 / 0 / 0
Регистрация: 10.07.2017
Сообщений: 11
10.07.2017, 09:52  [ТС] 8
AmbA, Спасибо)
0
AmbA
32 / 15 / 5
Регистрация: 09.06.2017
Сообщений: 95
Записей в блоге: 2
10.07.2017, 09:54 9
Скажите, а как вы из одной строки две будете делать?

А, вот, вижу похожие темы.
0
10.07.2017, 09:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2017, 09:54

Разделить строку на подстроки
Здравствуйте! На форме есть поле ввода (ФИО), значение в нем выбирается из справочника. Нужно...

Разделить строку на подстроки
В общем, есть текст: char text =...

Разделить строку на подстроки
Дана строка символов, состоящая из произвольного текста, слова разделены пробелами. Разбить...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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