Перейти к содержимому

Как из строки достать числа с

  • автор:

Как на языке Си вытащить из строки число

Или иначе.
Есть куча функций (http://www.cplusplus.com/reference/clibrary/cstring/strpbrk/) по поиску первого вхождения символа в строку, но как потом стандартными функциями начать считывание начиная С этого символа Я такой функции не нашёл.

Подскажите, уже времени кучу потерял.

Дополнен 11 лет назад

atoi не то
у меня там не только числа

Лучший ответ

Почитайте работу с указателями.

Как пример что касается строк:
#include
#include

int main ()
<
char str[] = «This is a sample string»;
char *pFind =strchr(str,’i’); //Находим первое ‘i’ в строке, получаем указатель на него
if (pFind) < //Если нашли
pFind++; //Сдвигаем указатель на следующий символ после ‘i’
pFind = strchr(pFind, ‘i’); //Ищем следующее ‘i’ (уже начиная с символа после ‘i’)
>
return 0;
>

Что касается вытащить число — чуть подробнее — надо вытащить любой символ из ‘0’-‘9’ из строки или преобразовать из строки в число?
если первое есть функция isdigit.
скажем так
Считает кол-во символов-чисел в строке
#include //Для isdigit
int main() <
char str = «str12str34»;
char *pFind = &str;
int intCount = 0;

while(*pFind!=’\0′) < //Пока не конец строки (не найден нуль терминатор)
if (isdigit(*pFind)) intCount++; //Если текущий символ число — увеличиваем счетчик
pFind++; //Сдвигаем указатель на следующий символ
>
return 0;
>

Если строку в число
Функция atoi
int intI = atoi(«1234»);

Извлечение чисел из строки в Python

В программировании на Python часто возникает задача извлечения чисел из строки. Например, у вас есть строка: «привет 12345, как дела 67890?». Вашей задачей является извлечение чисел 12345 и 67890 из этой строки.

Существуют различные подходы к решению этой задачи, но два наиболее распространенных — это использование регулярных выражений и метода isdigit() .

Использование регулярных выражений

Регулярные выражения — это специальный синтаксис для работы с текстом, который позволяет искать и извлекать определенные шаблоны. В Python для работы с регулярными выражениями используется модуль re .

import re line = "привет 12345, как дела 67890?" numbers = re.findall(r'\b\d+\b', line) print(numbers)

В этом коде используется функция findall() , которая возвращает все найденные совпадения. \b\d+\b — это регулярное выражение, которое ищет последовательности цифр.

Использование метода isdigit()

Метод isdigit() является встроенным методом для строк в Python. Он проверяет, состоит ли строка только из цифр.

line = "привет 12345, как дела 67890?" numbers = ''.join(c if c.isdigit() else ' ' for c in line).split() print(numbers)

В этом коде мы проходим по каждому символу в строке и, если символ является цифрой, сохраняем его. Если символ не является цифрой, мы заменяем его на пробел. Затем мы используем метод split() , чтобы разбить строку на список чисел.

Оба подхода эффективны и могут быть использованы в зависимости от конкретной задачи и предпочтений программиста.

Извлечь число из строки

Рекомендовать в новости

Даже из уже поставленных условий программисту должно быть ясно: одним циклом не обойтись. Алгоритм должен быть таким:
1. В цикле ищем первую цифру (0123456789) в строке.
2. Во втором цикле формируем выходную строку по примеру из (1). Цикл начинаем с позиции, найденной в п.1 и прерываем на первом же нецифровом символе (кроме пробела, его просто пропускаем)
3. Проверяем этот нецифровой символ, если это точка — проверяем следующие два символа: где гарантия, что не будет строки » комиссия: 11 343. актив»? Если эти символы — цифры, то к выходной строке добавляем точку и эти два символа (дробная часть).

6 — 02.03.2019 — 12:39
7 — 02.03.2019 — 12:49
8 — 02.03.2019 — 13:19
Сообщение от Begemot

После цикла из (1) в ЧислоСтр проверить последний символ и если это «.»- то вернуть строку без последнего символа.

Кодера, предлагающего такое, переименовать в «г. внокодера». Потому что от этого всего один шаг до эпического:

Если Слово=» комиссия: 11 343.91. актив» Тогда
ЧислоСтр=»11 343.91″;
КонецЕсли;

Программист же обязан предположить: а если там окажется две точки? Или три? Надеюсь, идея понятна? Если нет, то объясняю: по уму эти точки надо удалять в цикле.

А если не исключать и наличие точек в начале строки — в двух циклах. Ы?

P.S. Хотя, конечно, можно извратиться:

Цифры = «1234567890»;
Для НомСимвола = 1 По СтрДлина(Слово) Цикл
ТекущийСимвол =Сред(Слово, НомСимвола, 1);
Если ТекущийСимвол = «.» Тогда
ЧислоСтр = ЧислоСтр+» «;
ИначеЕсли Найти(Цифры, ТекущийСимвол) > 0 Тогда
ЧислоСтр = ЧислоСтр+ТекущийСимвол;
КонецЕсли;
КонецЦикла;
ЧислоСтр = СтрЗаменить(СокрЛП(ЧислоСтр),» «,».»);

Как получить числа из строки в 1С: две функции

Рассмотрим две функции, позволяющие получить числа из строки:

  • ПолучитьСтрокуТолькоПервыеЦифры — в результате строка из первых цифр строки,
  • ПолучитьСтрокуТолькоЦифры — в результате строка из всех цифр строки.
Функция strong>ПолучитьСтрокуТолькоПервыеЦифры/strong>(ЗНАЧ ВходнаяСтрока) РезультатТолькоПервыеЦифры = ""; ИндексЭлемента = 1; ДоступныеСимволы = "0123456789"; Пока ИндексЭлемента  ПроверяемыйСимвол = Сред(ВходнаяСтрока, ИндексЭлемента, 1); Если СтрНайти(ДоступныеСимволы, ПроверяемыйСимвол) = 0 Тогда Если ЗначениеЗаполнено(РезультатТолькоПервыеЦифры) Тогда Прервать; КонецЕсли; ВходнаяСтрока = СтрЗаменить(ВходнаяСтрока, ПроверяемыйСимвол, ""); Продолжить; Иначе РезультатТолькоПервыеЦифры = РезультатТолькоПервыеЦифры + ПроверяемыйСимвол; КонецЕсли; ИндексЭлемента = ИндексЭлемента + 1; КонецЦикла; Возврат РезультатТолькоПервыеЦифры; КонецФункции 
Функция strong>ПолучитьСтрокуТолькоЦифры/strong>(ВходнаяСтрока) Результат = ВходнаяСтрока; ИндексЭлемента = 1; ДоступныеСимволы = "0123456789"; Пока ИндексЭлемента  ПроверяемыйСимвол = Сред(Результат, ИндексЭлемента, 1); Если СтрНайти(ДоступныеСимволы, ПроверяемыйСимвол) = 0 Тогда Результат = СтрЗаменить(Результат, ПроверяемыйСимвол, ""); Продолжить; КонецЕсли; ИндексЭлемента = ИндексЭлемента + 1; КонецЦикла; Возврат Результат; КонецФункции 

эта строка скажет что их нет —>

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *