Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

Дана строка. Подсчитать сколько раз первая строка входит во вторую - C++
Дана строка. Подсчитать сколько раз первая строка входит во вторую. Например: вводим "при" (строка должна вводиться с клавиатуры, как на...

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

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

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

Строка + число - C++
Приветствую! Дано: Дана строка вида: "1+A/b+C+1/H+N" где h=1/N N=1..50; И вывести полученные строки в текстовый файл....

8
KOPOJI
Эксперт HTML/CSSЭксперт PHP
16701 / 6623 / 433
Регистрация: 12.06.2012
Сообщений: 19,880
Завершенные тесты: 1
01.10.2014, 21:45 #2
Например, с помощью strtol.
По ссылке есть примеры. З.Ы. Чем выполнять лишние действия (вырезать, а затем обратно вставить), проще просто скопировать.
0
zss
Модератор
Эксперт С++
6516 / 6078 / 2001
Регистрация: 18.12.2011
Сообщений: 15,792
Завершенные тесты: 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 / 0
Регистрация: 18.11.2013
Сообщений: 307
01.10.2014, 21:53  [ТС] #4
zss, А если строка вводится пользователем и мы заранее не знаем, что будет?
0
zss
Модератор
Эксперт С++
6516 / 6078 / 2001
Регистрация: 18.12.2011
Сообщений: 15,792
Завершенные тесты: 1
01.10.2014, 22:02 #5
Цитата Сообщение от ilya0610 Посмотреть сообщение
мы заранее не знаем
Как ТС спросил, такой и ответ.
Главное, чтобы была понятна идея.
0
ilya0610
1 / 1 / 0
Регистрация: 18.11.2013
Сообщений: 307
01.10.2014, 22:03  [ТС] #6
Хорошо, спасибо, будем думать
0
KOPOJI
Эксперт HTML/CSSЭксперт PHP
16701 / 6623 / 433
Регистрация: 12.06.2012
Сообщений: 19,880
Завершенные тесты: 1
02.10.2014, 00:14 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
С помощью 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 / 0
Регистрация: 18.11.2013
Сообщений: 307
03.10.2014, 08:55  [ТС] #8
KOPOJI, Вопрос такой, а можно ли это сделать не через vector, а при помощи библиотеки string. h и как?
0
KOPOJI
Эксперт HTML/CSSЭксперт PHP
16701 / 6623 / 433
Регистрация: 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
Привет! Вот еще темы с ответами:

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

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

Строка восьмеричное число - C++
Напишите программу, которая определяет, явлется ли введенная с клавиатуры строка восьмеричным числом. Need your help pls!!! &gt;_&lt;

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


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

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

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