Вы можете просмотреть std :: string как массив символов с помощью оператора [] и функции size (), чтобы получить его длину. Затем вы можете проверить значения символов от 49 до 57 (в десятичном виде, в соответствии с таблицей ASCII).
РЕДАКТИРОВАТЬ
Как указано в комментариях ниже, это будет Проще сравнить с диапазоном от 1 до 9, чем от 49 до 57. Но в любом случае было бы полезно ознакомиться с различными представлениями символов.
#include <iostream>
#include <string>
#include <vector>
int main()
{
std::string search_str = "abcd56";
for (int i = 0; i < search_str.size(); ++i) {
if (search_str[i] >= '1' && search_str[i] <= '9') {
std::cout << "found at " << i << "\n";
break;
}
}
}
Что касается std :: find, Я бы лучше использовал std :: find_first_of, который принимает две пары итераторов, одна указывает на диапазон, в котором нужно искать, а другая - на диапазон элементов для поиска. Если результат std :: find_first_of не равен end () искомого диапазона, то индекс первого элемента можно найти с помощью std :: distance (search_range.begin (), result).
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
int main()
{
std::string search_str = "abcd56";
std::vector<char> find_range {'1','2','3','4','5','6','7','8','9'};
auto result = std::find_first_of(search_str.begin(), search_str.end(), find_range.begin(), find_range.end());
if (result == search_str.end()) {
std::cout << "no elements were found\n";
} else {
std::cout << "found match at "
<< std::distance(search_str.begin(), result) << "\n";
}
}