2012-01-20 3 views
3

Я только начинаю изучать C++. Каковы мои варианты тестирования, если строка начинается с числа? Моя функция is_page_number делает трюк (я думаю) в следующей программе. Это плохая идея? Как я могу использовать регулярное выражение здесь? Если какая-либо часть кода не написана хорошо, любые комментарии оцениваются.тест, если строка начинается с номера

#include <string> 
#include <iostream> 
#include <fstream> 

using std::string; 
using std::cout; 
using std::ifstream; 
using std::endl; 

bool is_page_number(const string& aline) { 
    return aline[0] == '1' | aline[0] == '2' | aline[0] == '3' | aline[0] == '4' | aline[0] == '5' | aline[0] == '6' | aline[0] == '7' | aline[0] == '8' | aline[0] == '9'; 
} 

int main() { 
    const string temp_filename("test_input.txt"); 
    ifstream input(temp_filename.c_str()); 
    string one_line; 
    while (getline(input,one_line)) { 
      if(is_page_number(one_line)) { 
        cout << "page number: "; 
      } 
      cout << one_line << endl; 
    } 
} 
+1

Не используйте побитовое или оператора | когда вы действительно имеете в виду логическое или ||. Также подумайте, что произойдет, если is_page_number получит пустую строку. Аналогично, что произойдет, если строка начинается с 0? Я уже вижу ответ, указывающий на правильную функцию в cctype, но обдумайте и другие. – nsanders

+0

@nsanders, если он начинается с 0, то это восьмеричный номер страницы! ;-) –

+0

@nsanders отличные моменты, о которых нужно подумать. Спасибо вам за это! Я предполагаю, что is_page_number может получить пустую строку только в том случае, если one_line является пустой строкой (это справедливое предположение или я даже не могу предположить это?). Поэтому мне нужно будет проверить, что one_line не пуст или что происходит, когда это происходит. –

ответ

4
#include <cctype> 

return isdigit(aline[0]); 
+1

Вот несколько документов для этой функции: http://www.cplusplus.com/reference/clibrary/cctype/isdigit/ – nsanders

Смежные вопросы