2014-12-10 2 views
0

Я пытался отменить недопустимые значения, то есть whitespaces и characters, поскольку я хочу только разобрать двойные значения.Проверка if * char пробела или символов C++

Мой .txt файл выглядит следующим образом ...

1.45-1.46 
    -1.56 
1.78-dead 
-abc 
1.34-2.45 
1.56-9.01 

В принципе, я только хочу, чтобы хранить действительные дублей, так что первая линия 1.45-1.46, пятая строка 1.34-2.45 и последняя строка 1.56-9.01 действительны и остальные недействительны.

Я написал код, однако он не распознает whitespace или characters. Я получаю ошибку ISO C++ forbids comparison between pointer and integer.

Это код

char **marks; 
    marks = new char*[7] 
    for(int i=0; i<7; i++) 
    { 
    marks[i] = new char[64]; 
    istreams.getline(marks[i], 64); 
    char *delims; 
    delims = strtok (marks[i]," -"); 
    while (delims != NULL) 
    { 
     if(delims == '') // DOES NOT LIKE THIS, I WANT IT TO CHECK FOR WHITESPACE AND ALPHA CHARACTERS LIKE 'A', 'B', 'C'... 
     { 
     cout << "Invalid double" << endl; 
     } 
     else 
     { 
     cout << atof(delims); 
     delims = strtok (NULL, " ,.-"); 
     } 
    } 
    } 
+2

вы используете 'new' и' cout', поэтому это не C. Но почему бы не использовать 'std :: string'? – crashmstr

+1

Подсказка: 'delims' является * указателем * символу. –

+1

Этот код не выполняет никакого ввода * вообще *. Вы выделяете 'знаки' как' new char [64] ', затем отправляете содержимое неопределенного содержимого данных прямо на' strtok' и таким образом вызываете * неопределенное поведение *. – WhozCraig

ответ

0

Заканчивать функции

isalpha(int) 
isspace(int) 

Вам необходимо проверить каждый символ по отдельности отливкой его в междунар, хотя:

bool containsWhitespace(char const * c) { 
    char temp = *c; 
    if(temp != '\0') { 
     if(isspace(temp)) 
      return true; 
    } else { 
     return false; 
    } 
    return containsWhitespace(++c); 
} 

int main() { 
    if(containsWhitespace("ThisIsATest")) printf("First test failed."); 
    if(!containsWhitespace("This is a test")) printf("Second test failed."); 
} 

http://www.cplusplus.com/reference/cctype/isalpha/

http://www.cplusplus.com/reference/cctype/isspace/

+1

Если я правильно помню, isalpha()/isspace() do * not * принимает аргумент 'char *'. –

+0

Память @MartinR вам хорошо; вы правы. – WhozCraig

+0

Извините, вы правы. Он принимает int, который вы можете использовать из char. Обновление ответа. – tigertrussell

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