Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
ilya0610
1 / 1 / 2
Регистрация: 18.11.2013
Сообщений: 322
#1

Преобразование строка-число-строка - C++

01.10.2014, 19:32. Просмотров 371. Ответов 8
Метки нет (Все метки)

Здравствуйте, можете объяснить или показать на примере, как можно из строки извлечь числа, чтобы потом можно было с ними работать и каких их потом вернуть опять на свое место. Например "25 и 17 больше, чем 3"
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.10.2014, 19:32
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Преобразование строка-число-строка (C++):

дана строка, изображающая целое положительное число. Вывести сумму цифр этого числа. Строка должна вводиться с клавиатуры.
Будьте добры,помогите с решением задачи: дана строка, изображающая целое...

Дана строка. Подсчитать сколько раз первая строка входит во вторую
Дана строка. Подсчитать сколько раз первая строка входит во вторую. Например:...

Дана строка символов. Проверьте,является ли данная строка палиндромом
Парни нужна помощь,нужен код решения этой задачи на языке с++. Дана строка...

Почему строка, считанная из файла и такая же строка в программе не равны, хотя они, вроде бы, одинаковы?
Есть две строки. MSK="Москва" и from, считанная из текстовика, через...

Дана строка символов до точки. Составить программу, проверяющую, является ли данная строка палиндромом, т. е. читается ли она слева направо и справа н
Дана строка символов до точки. Составить программу, проверяющую, является ли...

Строка в число
Написать и протестировать функцию, которая преобразует строку двоичных цифр в...

8
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16744 / 6635 / 860
Регистрация: 12.06.2012
Сообщений: 19,880
Завершенные тесты: 1
01.10.2014, 21:45 #2
Например, с помощью strtol.
По ссылке есть примеры. З.Ы. Чем выполнять лишние действия (вырезать, а затем обратно вставить), проще просто скопировать.
0
zss
Модератор
Эксперт С++
6956 / 6518 / 4138
Регистрация: 18.12.2011
Сообщений: 17,208
Завершенные тесты: 1
01.10.2014, 21:49 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <sstream>
int main() 
{
    setlocale(LC_ALL,"Rus");
    const std::string s = "25 и 17 больше, чем 3";
    std::istringstream ssin(s);
    int n1,n2,n3;
    string s1,s2,s3;
    ssin>>n1; // 25
    ssin>>s1; //"и"
    ssin>>n2; //17
    ssin>>s2; //"больше,"
    ssin>>s3;  //"чем" 
    ssin>>n3;  // 3
    std::cout<<n1<<' '<<s1<<' '<< n2<<' '<<s2<<' '<< s3<<' '<< n3<<' ' << std::endl;
    system("pause");
    return 0;
}
0
ilya0610
1 / 1 / 2
Регистрация: 18.11.2013
Сообщений: 322
01.10.2014, 21:53  [ТС] #4
zss, А если строка вводится пользователем и мы заранее не знаем, что будет?
0
zss
Модератор
Эксперт С++
6956 / 6518 / 4138
Регистрация: 18.12.2011
Сообщений: 17,208
Завершенные тесты: 1
01.10.2014, 22:02 #5
Цитата Сообщение от ilya0610 Посмотреть сообщение
мы заранее не знаем
Как ТС спросил, такой и ответ.
Главное, чтобы была понятна идея.
0
ilya0610
1 / 1 / 2
Регистрация: 18.11.2013
Сообщений: 322
01.10.2014, 22:03  [ТС] #6
Хорошо, спасибо, будем думать
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16744 / 6635 / 860
Регистрация: 12.06.2012
Сообщений: 19,880
Завершенные тесты: 1
02.10.2014, 00:14 #7
Лучший ответ Сообщение было отмечено ilya0610 как решение

Решение

С помощью sstream, итераторов и replace/copy можно как-то так
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>
#include <iterator>
#include <vector>
#include <algorithm>
#include <sstream>
int main(int argc, char *argv[]) 
{
    std::vector<int> numbers;
    std::string s, tmp;
    std::getline(std::cin, s); //сохраняем введенную строку 
    //копируем строку,  из-за деструктивности replace_if
    tmp = s;
    std::replace_if(tmp.begin(), tmp.end(), [](char c) { return !std::isdigit(c); }, ' ');
    std::istringstream s_stream(tmp);
    std::copy(std::istream_iterator<int>(s_stream), std::istream_iterator<int>(), std::back_inserter(numbers));
    
    for(std::size_t i = 0, cnt = numbers.size(); i < cnt; ++i)
    {
        //что-то делаете с числами, например, выводите:
        std::cout << numbers[i] << std::endl;
    }
    //исходная строка
    std::cout << s << std::endl;
    
    std::cin.get();
}
0
ilya0610
1 / 1 / 2
Регистрация: 18.11.2013
Сообщений: 322
03.10.2014, 08:55  [ТС] #8
KOPOJI, Вопрос такой, а можно ли это сделать не через vector, а при помощи библиотеки string. h и как?
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16744 / 6635 / 860
Регистрация: 12.06.2012
Сообщений: 19,880
Завершенные тесты: 1
03.10.2014, 11:49 #9
Цитата Сообщение от ilya0610 Посмотреть сообщение
а при помощи библиотеки string. h
Непонятно, причем тут строки. Вектор используется для хранения чисел. Разве что переписать без использования алгоритмов, "нативно". Как-то так:
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
#include <iostream>
#include <vector>
#include <string>
 
int main(int argc, char *argv[]) 
{
    std::string s;
    std::vector<int> numbers;
 
    std::getline(std::cin, s); //сохраняем введенную строку 
 
    for(std::size_t i = 0, tmp = 0, symbols = 1, cnt = s.size(); i < cnt; ++i, symbols = 1)
    {
        if(isdigit(s[i]))
        {
            tmp = i;
            while(++i < cnt && isdigit(s[i]))
                ++symbols;
            numbers.push_back(std::atoi(s.substr(tmp, symbols).c_str()));
        }
    }
 
    for(std::size_t i = 0, cnt = numbers.size(); i < cnt; ++i)
    {
        //что-то делаете с числами, например, выводите:
        std::cout << numbers[i] << std::endl;
    }
    std::cin.get();
}
0
03.10.2014, 11:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.10.2014, 11:49
Привет! Вот еще темы с решениями:

Строка + число
Приветствую! Дано: Дана строка вида: &quot;1+A/b+C+1/H+N&quot; где h=1/N ...

Строка в число
Модификация кода путем добавления следующих пунктов: – добавить...

Строка восьмеричное число
Напишите программу, которая определяет, явлется ли введенная с клавиатуры...

Строка дробное число
Написать программу, которая проверяет, является ли введенная с клавиатуры...


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

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

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