Извлечь число из строки и присвоить его переменной.

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Adamant
Сообщения: 17
Зарегистрирован: 08 окт 2007, 20:42

Извлечь число из строки и присвоить его переменной.

Сообщение Adamant » 09 ноя 2007, 17:06

Уважаемые кодеры! Помогите недотепе! :confused:
Есть некая строка:
char str[] = "\"Некая строка\" 12345";
Как из нее извлечь число "12345" и присвоить его например: int str_ind
Не могу сообразить. Подскажите(желательно на простых Сях). :cool:

Adamant
Сообщения: 17
Зарегистрирован: 08 окт 2007, 20:42

Re: Извлечь число из строки и присвоить его переменной.

Сообщение Adamant » 09 ноя 2007, 21:38

Как на ваш взгляд такое решение:

Код: Выделить всё

int main()
  {
    FILE * fp;
    int i = 0, j = 0;
    char str[] = "qwerty   123456789  цшашц 1234 ";
    char str2[] = "";
    if( ( fp = tmpfile() ) == 0 )
      {
        puts( "Can not create temporary file" );
        Sleep( 2000 );
        exit ( 1 );
      }

    while( str[i] )
      {
        if( isdigit( str[i] ) )
          {
            while( isdigit( str[i] ) ) // извлечь только первое число
              {
                if( str[i] == '\0' )
                  break;
                fputc( str[i], fp );
                i++;
              }
            break;
          }
        i++;
      }
    rewind( fp );
    fgets( str2, 80, fp );
    fclose( fp );
    if( !strlen( str2 ) )
      puts( "Numbers is not found" );
    else
      puts( str2 ); // выводит    123456789
На мой взгляд приемлеемый вариант. Интересна любая критика
профи.
С уважением Вячеслав.

Аватара пользователя
WinMain
Сообщения: 912
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Re: Извлечь число из строки и присвоить его переменной.

Сообщение WinMain » 10 ноя 2007, 18:22

Принцип предложенного алгоритма понятен: сначала найти в строке первый символ, который является цифрой, а затем проверять последующие символы, являются ли они цифрами. Из полученной последовательности цифр формируется число. Но как быть, если число имеет не только целую, но и дробную часть, т.е. разделено десятичной запятой или точкой? К тому же число может быть не только положительным, но и отрицательным, т.е. иметь знак минус. Так же чисел в строке может быть несколько: дата, время, номер телефона...
Я бы предложил другой принцип извлечения чисел из строки: сначала строка разбивается на отдельные слова, а затем каждое слово проверяется на возможность преобразования его в число с помощью стандартных функций, типа atoi() и atof(). В отдельных случаях можно проверять слова, содержащие цифры, на соответствие формату даты, времени или чего-то другого...
Для расчленения строки на слова удобно использовать класс istrstream из стандартной библиотеки С++.
Приглашаю на свой сайт http://winmain.org

GeorgeSoca
Сообщения: 0
Зарегистрирован: 12 окт 2015, 04:09
Откуда: Guam
Контактная информация:

What hosting to choose?

Сообщение GeorgeSoca » 16 окт 2015, 12:29

On our web, you can feel safe! Besides we use mirrored hard drives on all of our servers so we also take backup twice a day on separate servers. We use ISPmanager as the control panel. ISPmanager is a control panel that makes it easy to administer its Web site. With us you can place as many websites and domains you wish for a hosting account.
virtual hosting

Ответить