2011-12-11 35 views
0

我使用strtok從標準輸入中得到一行中的標記。檢查令牌是否爲浮點字母數字或特殊字符。

fgets(line,MAXCOLS,stdin); 
    printf("line:%s\n",line); 
    ch = strtok(line," "); 
    while(ch != NULL) 
    { 
     printf("%s\n",ch); 
     ch = strtok(NULL," "); 
    } 

但是,我如何知道我的ch是一個浮點數,字母數字值還是特殊字符?

+0

'ch'將始終具有相同的類型'char *'。根據文件的編碼(ASCII,ANSI,UTF8等),您可以檢查'ch'指向的值作爲字符,以查看它們是否爲0..9,a..z/A..Z, etc ... – jv42

+0

問題是,我如何檢查它? Isnum需要檢查整數值,而不是浮點數。 – user983043

回答

3

您的ch從來沒有這些東西。它是總是指向一組字符的指針。

您可能想知道這些字符是否爲數字值的文本表示。爲此,您可以在令牌上運行strtol()strtod()並查看您是否成功。請注意,像12.34這樣的東西將被成功讀取爲整數和浮點數,所以您應該爲這些函數提供第二個參數,並檢查您是否真的到達了令牌的末尾(而不是僅轉換初始部分的代幣):

char * e; 
long int n = strtol(ch, &e, 0); 

if (*e != 0) { /* error? */ } 
1

您可以使用is*函數系列,例如isalpha()

但是請注意,這隻告訴你關於一個字符的值。一個角色只是一個角色,它不是一個浮動物。

相關問題