2014-07-23 86 views
0

我試圖從stdin讀取一個字符串,並用'_'替換字符串上的元音。 關閉當然很簡單,但我也想替換重音元音。很明顯,下面的代碼不適用於這些情況。我已經被燒焦tryied一些東西,比如讀取字符,但它的短,考慮到情況行[I] < 0等從字符串中刪除元音。

while(fgets(line, 250, stdin)){ 
    size=strlen(line); 
    for(i=0;i<size;i++){ 
     if(line[i]==65 || line[i]==69 ||line[i]==73 ||line[i]==79 ||line[i]==85 ||line[i]==97 ||line[i]==101 ||line[i]==105 ||line[i]==111 ||line[i]==117){ 
      line[i]='_'; 
     } 
    } 
} 

有什麼建議?先謝謝你。

PS:考慮使用的編碼是西方(ISO-8859-1) - >http://www.alanwood.net/demos/ansi.html

+2

你知道,一個神奇的數字'65'不*有*是大寫''A''?那麼,爲什麼不簡單使用字母文字「A」,它總是大寫字母「A」。 –

+1

你的問題是什麼? – dohashi

+0

我知道,但那不是我提出的問題... – PablodeAcero

回答

1

您可能正在運行到一個簽名VS無符號字符的問題。重要字符的ANSI值在您提供的鏈接上顯示的大於已簽名字符的最大大小。這可能是你爲什麼看到否定性格的原因。

如果你想解決這個問題,我建議使用寬字符格式和字符常量。

如果你想要的東西簡單快捷,添加以下你的for循環,看看如何字符映射到值:

printf("%c %d\n", line[i], (int)line[i]); 

然後適當的值添加到您若。

+0

'%s'應該是'%c',否則,是的 – user3386109

+0

我會解決這個問題的。謝謝 – dohashi

0

我用下面的數據 htyuàsdsècvcvcàdìssd

和下面的代碼使用重音字符。其結果是htyu_sds_cvcvc_d_ssd

#include <stdio.h> 
    #include <wchar.h> 
    #include <locale.h> 
    int main(int argc, char **argv){ 
     setlocale(LC_CTYPE, "UTF-8"); 
     FILE *f = fopen("/Users/sandeepshabd/objectiveC/C_TEST_App/C_TEST_App/file.txt", "r, ccs=UTF-8"); 
if (!f) 
    return 1; 

for (wchar_t c; (c = fgetwc(f)) != WEOF;){ 
    switch (c) { 
     case L'à': c=L'_'; break; 
     case L'è': c=L'_';break; 
     case L'é': c=L'_';break; 
     case L'ì': c=L'_';break; 
     case L'ò': c=L'_';break; 
     case L'ù': c=L'_';break; 
     default: break; 
    } 
    wprintf(L"%c", c); 
} 


fclose(f); 
return 0; 

}

+0

這不會工作,因爲ascii字符是8位而不是16位,所以很多/大多數字符將失敗。只需使用getc之類的東西,它會返回一個int,並且只比較低8位。 – user3629249

+0

我們在這裏談論拉丁字符。不是說UTF 8支持拉丁字符嗎?我知道我們何時可以爲其他國際字符集,事情可能無法正常工作。 [UTF-8拉丁語支持](http://www.utf8-chartable.de/) –

+0

@ user3629249:ASCII字符中沒有重音元音。 –