Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 1
Регистрация: 25.10.2010
Сообщений: 29

как вычислисть в строке цифры?

23.01.2012, 18:18. Показов 2527. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
дана строка до '/n', нужно определить команду и аргументы например, такого рода команда __wait 1000 Ok означает что будем ждать 1 сек пока не появится строка Ok, я реализовал след.способом
C++
1
2
3
4
5
6
if (line.startsWith("__wait")){ // wait acknowledge
      line = line.mid(8); // на 8 позиции находится цифра
      int timeout = line.toInt();
      // как определить на каком смещении располагается строка?
      slot_waitAnswer(s, timeout);
}
но цифры могут быть однозначными так и трехзначными, соответственно смещение третьего аргумента будет смещаться, как написать правильно? Новичок я..
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.01.2012, 18:18
Ответы с готовыми решениями:

Заменить слова описывающие цифры на сами цифры в строке
Не могу решить зачетную задачу: Дан текст, состоящий из слов чисел и знаков арифметических операций. Заменить слова описывающие цифры на...

Как удалить все цифры в строке
int HP = 5; Health.Text = ("" + (HP += 1)); for (int i = 0; i <= HP; i++) { Health.Text...

Зная расстояние и время, вычислисть скорость (решение одной функцией)
Эта мой первый php скрипт, поэтому прошу не судить строго. Условия задачи очень просты: зная расстояние и время, вычислисть скорость, и...

13
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
23.01.2012, 18:44
найди пробел в исходной строке минус __wait и получи его позицию вот и получается что разница и есть длинна на которую будет смещен третий аргумент
0
385 / 229 / 12
Регистрация: 06.07.2011
Сообщений: 512
23.01.2012, 20:28
C++
1
2
3
4
5
6
QStringList argElements = argString.split(" ",QString::SkipEmptyParts);
if (argElements.at(0) == "__wait") {
   int timeout = argElements.at(1).toInt();
   QString expectedString = argElements.at(2);
   slot_waitAnswer(expectedString, timeout);
}
1
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
23.01.2012, 22:10
читайте про регулярные выражения! это самое то для таких вещей, я когда-то писал свой язык интерпритируемый на них, оч удобно...

Добавлено через 6 минут
будет что-то вроде такого:
C++
1
2
3
4
5
6
7
8
QString inputSTR;
....
QRegExp exp("_+(\\w+)\\s+(\\d+)\\s+(\\w+)";
if(exp.indexIn(inputSTR) >= 0){
  exp.cap(1); //первое слово, без "__" сиволов
  exp.cap(2); // число после первого слова (в виде строки)
  exp.cap(3); // второе слово 
}
1
0 / 0 / 1
Регистрация: 25.10.2010
Сообщений: 29
13.02.2012, 17:47  [ТС]
Прошу мне помочь разобраться, как с помощью регулярного выражения понять где функция а где аргумент, а также извлечь аргумент из скобки, например, имеются две функции
write("load -r -b -ymodem"); send("redboot.bin");
мне нужно первое понять что это за функция, затем извлекаем аргумент, который может любого типа от целочисленного до строки в зависимости от функции.
Заранее благодарен.
0
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
13.02.2012, 18:04
аргумент только один? обязательно в ковычках?
0
0 / 0 / 1
Регистрация: 25.10.2010
Сообщений: 29
13.02.2012, 18:17  [ТС]
иногад бывает что нужно использовать функции у которых два аргумента разных типов, например
wait("RedBoot>", 500);
0
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
13.02.2012, 18:27
хорошо, разделение обязательно идёт через запятую?

Добавлено через 6 минут
в общем как-то так получаем функцию и аргументы:
C++
1
(\w[\w\d]*)\s*[(]\s*([^)]*)\s*[)][;]
в cap(1) - имя функции, в cap(2) все аргументы.

Далее разделяем все аргументы:
C++
1
QStringList args = cap(2).split(",");
если кавычки не нужны, то предварительно, перед сплитом, делаем remove("\"");
1
0 / 0 / 1
Регистрация: 25.10.2010
Сообщений: 29
13.02.2012, 18:28  [ТС]
ну это нужно юзеру, чтобы было ему привычно писать скрипт загрузки прошивки в прибор, чтобы не звать программиста, а сам своими руками. Наверное я думаю, нужны запятые или же лучше написать через пробел безо всяких скобок и запятых, тогда надо вводить специальные символы указывающие на функции. Может посоветуете?
0
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
13.02.2012, 18:33
раз уж я уже всё равно преступник, то буду пиариться: тут я выложил кусок кода, который когда-то писал, там свой псевдоязык, можно сказать скриптовый, который в конечном итоге говорит, чему равно выражение - true\false. посмотрите, должно подойти к Вашей задаче.
1
0 / 0 / 1
Регистрация: 25.10.2010
Сообщений: 29
14.02.2012, 11:37  [ТС]
Спасибо большое, будем разбираться и учиться!

Добавлено через 17 часов 0 минут
l_a_m, плиз прошу помочь разобраться..
Регулярное выражение, которое Вы мне предложили, почему-то не работает
я переписал по своему и вот что получилось
рег выраж.
C++
1
"([a-zA-Z][\\w\\d]+)\\s*[(]\\s*(\\w+)\\s*[)]"
ввожу команду sleep(50), в cap(1) -"sleep" в cap(2) -"50"
теперь мне надо ввести wait("hello") - не срабатывает наверное из за ковычек, как изменить выражение чтобы получить строку, заключенную в ковычках?
0
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
14.02.2012, 11:53
Цитата Сообщение от samsas traum Посмотреть сообщение
Регулярное выражение, которое Вы мне предложили, почему-то не работает
что-то это клеветой попахивает!
Миниатюры
как вычислисть в строке цифры?  
0
0 / 0 / 1
Регистрация: 25.10.2010
Сообщений: 29
14.02.2012, 12:20  [ТС]
l_a_m, да лан, сразу прям клеветой то.. Спасибо, может неправильно переписал..
Точно не внимательно, все работает. Спасибо!
0
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
14.02.2012, 12:26
кстати был предельно удивлён тому, что это таки заработало, т.к. писал полагался на далеко не здоровый разум и совершенно не трезвый рассудок ) в общем по памяти писал)))
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.02.2012, 12:26
Помогаю со студенческими работами здесь

Массив строк в с++. Вывести строки, в которых есть цифры. В каждой строке удалить все цифры
Помогите пожалуйста с задачей ! срочно!! Необходимо написать программу, в которой с клавиатуры вводится до 10 символьных строк. Вывести...

Как удалить в строке цифры, но оставить буквы?
Как удалить в строке числа но при етом оставить все буквы тоесть к примеру есть String str= "a,c,v,Q,8,9"; ну до 8,9 удалить...

Как в заданой строке удальть все цифры???
:help: :help: :help: помогите с задачами 1. нужно ввести строку в Edit естествнно и удалить из неё все циры. 2. Определить число...

Как вывести все цифры, содержащиеся в строке?
У меня задание такое - дана строка символов. Вывести на экран цифры, содержащиеся в строке. Вот что написал - private void...

Как в заданой строке удалить все цифры?
:wall: :help: помогите с задачами 1. нужно ввести строку в Edit естествнно и удалить из неё все циры. 2. Определить число символов,...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru