Страница 1 из 1
Извлечь число из строки и присвоить его переменной.
Добавлено: 09 ноя 2007, 17:06
Adamant
Уважаемые кодеры! Помогите недотепе!
Есть некая строка:
char str[] = "\"Некая строка\" 12345";
Как из нее извлечь число "12345" и присвоить его например: int str_ind
Не могу сообразить. Подскажите(желательно на простых Сях).

Re: Извлечь число из строки и присвоить его переменной.
Добавлено: 09 ноя 2007, 21:38
Adamant
Как на ваш взгляд такое решение:
Код: Выделить всё
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
На мой взгляд приемлеемый вариант. Интересна любая критика
профи.
С уважением Вячеслав.
Re: Извлечь число из строки и присвоить его переменной.
Добавлено: 10 ноя 2007, 18:22
WinMain
Принцип предложенного алгоритма понятен: сначала найти в строке первый символ, который является цифрой, а затем проверять последующие символы, являются ли они цифрами. Из полученной последовательности цифр формируется число. Но как быть, если число имеет не только целую, но и дробную часть, т.е. разделено десятичной запятой или точкой? К тому же число может быть не только положительным, но и отрицательным, т.е. иметь знак минус. Так же чисел в строке может быть несколько: дата, время, номер телефона...
Я бы предложил другой принцип извлечения чисел из строки: сначала строка разбивается на отдельные слова, а затем каждое слово проверяется на возможность преобразования его в число с помощью стандартных функций, типа atoi() и atof(). В отдельных случаях можно проверять слова, содержащие цифры, на соответствие формату даты, времени или чего-то другого...
Для расчленения строки на слова удобно использовать класс istrstream из стандартной библиотеки С++.
What hosting to choose?
Добавлено: 16 окт 2015, 12:29
GeorgeSoca
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