2014-02-04 4 views
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

'для (CHAR I 'A' =; я <= 'г'; я ++)' кажется неправильным. Разница в A и a равна 32 и 26. –

+0

Итак, вы хотите искать символы или хотите, чтобы строка содержала только цифры? Эти два не совпадают. – juanchopanza

ответ

3

насчет

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

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

0

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

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

+0

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

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

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

#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 
} 

Надежда, что помогает :)

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

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

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

std::regex expr4to8dig("^[\\d]{4,8}$"); 
Смежные вопросы