Использование индекса для поиска нескольких символов
В моем проекте Arduino будет получена строка. Я понимаю использование .indexof
для поиска расположения определенного символа в строке. Моя проблема в том, что мне нужно найти первое вхождение любой буквы A-Z и я не нашел никаких ресурсов, касающихся использования или
операторов в .indexof
, он же строка.indexof("a" || "b"....)
.
Является ли это чем-то невозможным с помощью функций indexof, и если да, то есть ли какая-либо функция, которую я могу использовать для решения этой проблемы! Спасибо!
@dcal, 👍0
Обсуждение1 ответ
Вот две функции, которые, я надеюсь, помогут вам в ваших начинаниях. Вы можете указать либо строку, либо массив символов, и вы должны получить первую позицию альфа-символа. Возвращает -1, если его нет.
Видишь https://www.arduino.cc/reference/en/language/functions/characters/isalpha/
Обновление:
Благодаря замечательным комментариям от Edgar & Mat я обновил функции с учетом лучших практик и улучшений затрат.
int alphaPos(const char* str)
{
for (int i = 0; str[i] !=0 ; ++i) {
if (isAlpha(str[i]))
{
return i;
}
}
return -1;
}
int alphaPos(const String& str)
{
return alphaPos(str.c_str());
}
/*
Usage:
String bobble = "&&&88434a";
int x = alphaPos(bobble);
if (x != -1)
{
...x has the position in the string
}
else
{
...There is no alpha char present.
}
*/
Я предлагаю передать ссылку " const` на вторую перегрузку., @Edgar Bonet
@EdgarBonet, я признаю, что мне еще многому нужно научиться, поэтому честно спросите, в чем выгода?, @voidPointer
@voidPointer: это указывает вызывающему, что функция не будет изменять переданную строку. Это хорошая практика. Также вы можете избежать вызова "strlen" (что удваивает стоимость функции) - вместо этого используйте " str[i] != 0` в условии цикла., @Mat
@Мат. Спасибо. Этот совет strlen довольно крут и тоже поможет другим., @voidPointer
Чтобы подробнее прокомментировать комментарий Мэта: если вы хотите получить представление о том, почему это считается хорошей практикой, см. [Const Correctness](https://isocpp.org/wiki/faq/const-correctness) на isocpp.org вики., @Edgar Bonet
@EdgarBonet Это хорошее чтение. Спасибо., @voidPointer
- Очень простая операция Arduino Uno Serial.readString()
- Из string в int, проблема
- Как преобразовать строку в шестнадцатеричный массив
- Ардуино - Извлечение нескольких строк из последовательного чтения
- Отправлять строки через SPI в обе стороны, используя два Arduino UNO (ведущий к ведомому и ведомый к ведущему)
- Команда через последовательный монитор не работает должным образом в Arduino
- Объединить данные Serial, разделенные новыми строками?
- Как разделить входящую строку?
индекс предназначен только для одного сравнения за раз. есть встроенный " isupper(символ)`: http://www.cplusplus.com/reference/cctype/isupper/. вы можете найти сразу много символов, используя https://www.cplusplus.com/reference/cstring/strcspn/, @dandavis
Вы также можете использовать цикл for, который проверяет значение i (или любой другой переменной), а затем, в зависимости от того, что я такое, он запускает indexof с разными буквами., @RMCodes