2013-02-11 6 views
0

Я пытаюсь написать функцию, которая обнаруживает гласные и цифры в строке. итерации по строке, im пытается сделать однострочный оператор if, чтобы проверить, является ли символ гласным. Код, указанный ниже ...Обнаружение гласных в строке

void checkString(char *str) 
{ 
    char myVowels[] = "AEIOUaeiou"; 

    while(*str != '\0') 
    { 
     if(isdigit(*str)) 
      printf("Digit here"); 
     if(strchr(myVowels,*str)) 
      printf("vowel here"); 
     str++; 
    } 
} 

Проверка цифр отлично работает. Однако "(strchr (myVowels, * str))" не работает. В нем говорится о разных типах формального и фактического параметра 1. Может ли кто-нибудь помочь мне здесь? Спасибо

+3

ли вы включить 'string.h'? – cnicutar

+0

попробуйте typecasting str * для символа перед передачей его функции – Techmonk

+0

@Techmonk Вам не нужно ничего бросать, так как '* str' уже является символом' char'. Он должен работать так, как есть. – cnicutar

ответ

1

Скорее всего, вы не включили правильные файлы заголовков.

Это работает просто отлично:

#include <stdio.h> 
#include <ctype.h> 
#include <string.h> 

void checkString(const char *str) 
{ 
    char myVowels[] = "AEIOUaeiou"; 

    printf("checking %s... ", str); 

    while(*str != '\0') 
    { 
     if(isdigit(*str)) 
      printf("Digit here "); 
     if(strchr(myVowels,*str)) 
      printf("vowel here "); 
     str++; 
    } 

    printf("\n"); 
} 

int main(void) 
{ 
    checkString(""); 
    checkString("bcd"); 
    checkString("123"); 
    checkString("by"); 
    checkString("aye"); 
    checkString("H2CO3"); 
    return 0; 
} 

Output (ideone):

checking ... 
checking bcd... 
checking 123... Digit here Digit here Digit here 
checking by... 
checking aye... vowel here vowel here 
checking H2CO3... Digit here vowel here Digit here 
+0

Обратите внимание, что часто необходимо преобразовать аргумент в '' '' s 'is ...()' функции 'unsigned char'. См. [Страница руководства] (http://www.manpagez.com/man/3/ctype/). – unwind

+0

@unwind Интересная деталь, спасибо. Я бы предположил, что мы имеем дело с символами ASCII (поскольку EBCDIC и другие практически исчезли), и поэтому все хорошо. –

+0

Угадайте, что это было связано с отсутствующими заголовками. Спасибо, отлично работает сейчас – kype

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

  • Нет связанных вопросов^_^