Поиск персонажа по строкам

0
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string id;

    cout << "Enter your ID: ";
    getline(cin, id);

    for(char i = 'A'; i <= 'z'; i++) {
        for(int j = 0; j <= id.length(); j++) {
            if(id[j] == id.find(i)) cout << "It has characters.";
        }
    }

    return 0;
}

Я хочу ввести номер id, но он должен быть целым числом. Если идентификатор имеет любой символ, он должен вернуть сообщение. Но я не знаю, что не так с моим кодом.

  • 0
    for(char i = 'A'; i <= 'z'; i++) кажется неправильным. Разница в А и А составляет 32 и 26.
  • 0
    Итак, вы хотите искать символы, или вы хотите убедиться, что строка содержит только цифры? Эти два не одно и то же.
Теги:
string
search
character

4 ответа

3
Лучший ответ

Как насчет

if !std::all_of(id.begin(), id.end(), std::isdigit) 

так как он сказал, что "он должен быть целым"?

0

Я бы использовал регулярные выражения для такого рода проверки. Он работает так:

#include <regex>
#include <string>

std::string toTest("12345");
std::regex expr("^[\\d]+$");

if (std::regex_match(toTest, expr))
{
  // toTest contains only digits and at least one digit.
}
else
{
  // toString is either emtpy or contains non-digit characters
}

Надеюсь, это поможет :)

Изменить. Если вы хотите изменить свою программу, чтобы проверить, имеет ли идентификатор определенную длину, вы можете использовать следующие регулярные выражения:

std::regex expr4dig("^[\\d]{4}$");

Это допускает только 4 цифры. Если вы хотите проверить идентификатор с 4 по 8 цифр, вы используете это регулярное выражение:

std::regex expr4to8dig("^[\\d]{4,8}$");
0

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

long long id;
while (true) {
   cout << "Enter your ID: ";
   getline(cin, input);

   stringstream strm(input);
   if (strm >> id)
     break;
   cout << "ID has invalid symbols or too long" << endl;
 }
0

У вас две проблемы: во-первых, std::string::find не возвращает символ, он возвращает позицию. Вторая проблема заключается в том, что ваш внутренний цикл будет выходить за рамки для строки.

Также обратите внимание, что в алфавите ASCII есть специальные символы между буквами upper- и строчными буквами.

  • 0
    Я думаю, что я решил это: for (char i = 'A'; i <= 'z'; i ++) {for (int j = 0; j <= id.length (); j ++) {if (id [j ] == i) cout << «У него есть символы». << endl; }}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню