2013-02-11 68 views
0

我試圖編寫一個函數來檢測字符串中的元音和數字。遍歷字符串,即時嘗試做一個單行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 2013-02-11 10:45:33

+0

在將字符傳遞給函數之前,嘗試將str * str *轉換爲字符 – Techmonk 2013-02-11 10:48:24

+0

@Techmonk由於'* str'已經是'char',因此不需要投出任何東西。它應該按原樣工作。 – cnicutar 2013-02-11 10:48:51

回答

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

輸出(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

請注意,通常需要將參數轉換爲''的'... ...()'函數爲'unsigned char'。請參閱[手冊頁](http://www.manpagez.com/man/3/ctype/)。 – unwind 2013-02-11 10:59:37

+0

@unwind有趣的細節,謝謝。我假設我們正在處理ASCII字符(因爲EBCDIC和其他實際上已經絕跡),所以一切都很好。 – 2013-02-11 11:05:14

+0

猜猜這是與丟失的標題有關。感謝您的支持 – kype 2013-02-11 11:23:45