3 / 3 / 2
Регистрация: 18.12.2014
Сообщений: 64
1

Функция извлечения цифр из строки

01.03.2015, 10:57. Показов 1524. Ответов 12
Метки нет (Все метки)

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
int fromString( string& s)
{
    istringstream iss(s);
    int res;
    iss >> res;
    return res;
}
...
long long discard_non_digits(string s) 
{
    vector<int> stack;
    int number=0;
    string s2;
    for(int i=0; i<(int)s.size(); i++)
    {
        if(isdigit(s[i]))
        //for(int j=48; j<=57; j++)
        {
            //if ((int)s[i]==j)
            //{
                s2=s[i];
                number=fromString(s2);
                stack.push_back(number);
            //}
        }
    }
    long long result=0;
    for(int i=0; i<(int)stack.size(); i++) result=result*10+stack[i];
    return result;
}
Ф-я discard_non_digits() принимает аргументом по умолчанию строку, просматривает ее и запихивает в вектор stack все цифры из этой строки. Потом в переменную result записывает созданное число из цифр, находящихся в векторе. Код не весь мой (закомментен оригинальный вариант).
Проблема в том, что эта ф-я просматривает строку до первого пробела, что очень странно: любая строка терминируется нулевым символом, а тут пробелом. Даже в оригинальном варианте с проверкой символов по ASCII кодам - десятичный цифры: от 48 до 57, пробел: 32 и 160. Почему так?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.03.2015, 10:57
Ответы с готовыми решениями:

Не вызывается функция по поиску цифр из заданной строки
Никак не могу найти,где ошибка! Вроде все работает, а вот функция по поиску цифр из заданной строки...

Функция по переводу любой строки состоящей из цифр в переменную типа int
Создать программу, которая содержит функцию по переводу строки состоящей из цифр пример: char...

Функция вычисляющая количество цифр числа и сумму этих цифр
Не могу найти ошибку. Помогите пожалуйста. Дана последовательность n натуральных чисел. Для...

Функция удаления из строки цифр
Задание: Напишите программу, которая осуществляет изменение обрабатываемой строки, удаляя из неё...

12
Заблокирован
Автор FAQ
01.03.2015, 11:10 2
Иван_Богданов, я не захотел допиливать, т.к такое простое задание делается в 1-м цикле с 1-м буффером
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 <string>
#include <iostream>
using namespace std;
 
int main(){
    string input = "some23 string 1 wit4 digits12#247<fhj";
    string output;
    for( size_t elem = 0; elem < input.size(); elem++ )
        if( input[elem] < '0' || input[elem] > '9' )
            continue;
        else
            output += input[elem];
    cout<<"INPUT : "<<input<<endl;
    cout<<"OUTPUT: "<<output<<endl;
    
    int number = 0;
    if( !output.size() )
        cout<<"string not contain digits"<<endl;
    else
    if( sscanf(output.data(), "%d", &number) )
        cout<<"NUMBER : "<<number<<endl;
    else
        cout<<"sscanf ERROR"<<endl;
    cin.get();
    return 0;
}
http://codepad.org/iryelqlK
INPUT : some23 string 1 wit4 digits12#247<fhj
OUTPUT: 231412247
NUMBER : 231412247
1
236 / 195 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
01.03.2015, 11:11 3
Для пропуска пробелов вставьте такой код: if(s[i] == ' ') continue; перед if(isdigit(s[i]))...
0
Don't worry, be happy
17215 / 10090 / 1949
Регистрация: 27.09.2012
Сообщений: 25,191
Записей в блоге: 1
01.03.2015, 11:53 4
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
#include <string>
#include <iostream>
#include <iterator>
#include <algorithm>
#include <sstream>
 
template < typename T >
T string_cast ( const std::string & str )
{
   std::stringstream ss ( str ) ;
   T result ;
   ss >> result ;
   return result ;
}
 
int main(){
   std::string input = "some23 string 1 wit4 digits12#247<fhj";
   std::string output;
   std::copy_if(input.begin(),input.end(),std::inserter(output,output.end()),isdigit) ;
   if ( !output.empty() )
   {
      std::cout << output << std::endl ;
      std::cout << string_cast<long>(output) << std::endl ;
   } else
   {
      std::cout << "string not contain digits" << std::endl ;
   }
}
1
3 / 3 / 2
Регистрация: 18.12.2014
Сообщений: 64
01.03.2015, 17:27  [ТС] 5
-=ЮрА=-, очень интересно. Ваш код работает только тогда, когда строка инициализирована непосредственно в коде программы. А в моем варианте строка вводится пользователем во время работы программы. (Т.е. прога также спотыкается на пробеле.)
SmittWesson, вариант с принудительной интерацией про встрече с пробелом тоже не работает (в переменную записывается все до пробела).
А в варианте Croessmah компилятор жалуется на стремный идентификатор "инсертер" в 19 строке и на то, что copy_if не является членом std
0
Don't worry, be happy
17215 / 10090 / 1949
Регистрация: 27.09.2012
Сообщений: 25,191
Записей в блоге: 1
01.03.2015, 17:34 6
Цитата Сообщение от Иван_Богданов Посмотреть сообщение
что copy_if не является членом std
C++11
http://ideone.com/WX1fgI
0
Заблокирован
Автор FAQ
01.03.2015, 18:12 7
Цитата Сообщение от Иван_Богданов Посмотреть сообщение
-=ЮрА=-, очень интересно. Ваш код работает только тогда, когда строка инициализирована непосредственно в коде программы. А в моем варианте строка вводится пользователем во время работы программы. (Т.е. прога также спотыкается на пробеле.)
когда показывают код в онлайн компиляторах то чтобы оценить работоспособность ввод не делают а пишут константным, замени
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
string input; getline(cin, input);/* = "some23 string 1 wit4 digits12#247<fhj"*/;
и вбей чаров строки.
0
Don't worry, be happy
17215 / 10090 / 1949
Регистрация: 27.09.2012
Сообщений: 25,191
Записей в блоге: 1
01.03.2015, 18:17 8
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
cin>>input;
C++
1
std::getline ( cin , input ) ;
operator>> считает только до разделителя
0
-=ЮрА=-
01.03.2015, 18:20
  #9

Не по теме:

Croessmah, ну я как бы знаю...

0
Croessmah
01.03.2015, 18:24
  #10

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Croessmah, ну я как бы знаю...
ну это скорее сообщение не Вам, а для упреждения повтора проблемы
Цитата Сообщение от Иван_Богданов Посмотреть сообщение
Проблема в том, что эта ф-я просматривает строку до первого пробела
а то ведь перекопирует без раздумий и получит опять эту проблему

0
-=ЮрА=-
01.03.2015, 18:26
  #11

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
ну это скорее сообщение не Вам, а для упреждения повтора проблемы
- я поравил это ещё до твоего поста, т.к внимательно прочёл вот это
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
(Т.е. прога также спотыкается на пробеле.)
, посмотри внимательно
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
string input; getline(cin, input);

0
Croessmah
01.03.2015, 18:30
  #12

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
я поравил это ещё до твоего поста, т.к внимательно прочёл вот это
а я писал и отправлял сообщение, когда правки еще не было.
Посмотрите внимательнее:
C++
1
cin>>input;
И вообще, давайте не будем спорить на пустом месте. Я написал, Вы в это время исправили, мой пост потерял актуальность и его можно удалить.

0
3 / 3 / 2
Регистрация: 18.12.2014
Сообщений: 64
01.03.2015, 20:17  [ТС] 13
Спасибо, не помню, кому: проблема то решалась элементарно: нужна была ф-я getline(istream& is, string& str), которая "извлекает символы из is и записывает их в str (до делимитера)"
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.03.2015, 20:17

Функция извлечения числовых значений
Привет! Не могу понять как красиво написать алгоритм извлечения числовых значений со строки ,в...

Функция перевода строки цифр в число
Если в качестве первого аргумента я указываю какую либо букву, то в качестве результата почему то...

Парсинг текстового файла для извлечения строки IP
Как в c# текстовом файле data.txt найти определенную строку, в моем случае &quot;&lt;/span&gt; &lt;big...

Подсчитать чего больше (цифр, букв) в последовательности и составить строки только из цифр
Дана последовательность, состоящая из цифр, букв и знаков пунктуации в произвольном порядке....


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

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

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