Как на языке Си вытащить из строки число
Или иначе.
Есть куча функций (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; КонецЦикла; Возврат Результат; КонецФункции
эта строка скажет что их нет —>