2012-04-09 38 views
0

當稱爲我正在寫該變換字母爲小寫一個C程序的代碼:如何根據命令行參數編寫將字母轉換爲大寫或小寫的程序?

./arg lower 

並且當作爲調用它們轉換爲大寫:

./arg upper 

下面是代碼,其我寫道,請幫助我:

#include<stdio.h> 
#include<ctype.h> 
main(int argc,char *argv[]) 
{ 
    int i; 
    char c; 
    for(i=1;i<argc;++i) 
    { 

     if(*(argv+i)=="lower") 
     { 
      while((c=getchar())!=EOF) 
       { 
         c=tolower(c); 
         putchar(c); 
       } 
     } 
     if(*(argv+i)=="upper") 
     { 
      while((c=getchar())!=EOF) 
       { 
         c=toupper(c); 
         putchar(c); 
       }      
     } 
    } 
    return 0; 
} 
+0

我可以看到這個問題有兩個錯誤。 __1__:這不是一個真正的問題。對於我的生活,我無法弄清楚你想問什麼,爲什麼你想要它。 __2__:__我的c代碼是否正確?__問你的老師。 – 2012-04-09 17:50:15

+2

@Pranav:代碼不是很長,而且有明顯的錯誤。這不是一個很好的問題,但也不是一個可怕的第一個問題。 – cha0site 2012-04-09 17:54:04

回答

6

你不能像C那樣做字符串比較,你需要使用strcmp(3)

更好的是,使用strncmp(3)並指定緩衝區的大小。

最後,對於數組訪問,您可以使用argv[i]而不是*(argv+i)。意思是一樣的,但第一個版本更具可讀性。

所以,你想要的東西,如:

if (0 == strncmp(argv[i], "lower", 6)) { 
    ... 
} 
5

您必須使用strcmp()函數來比較字符串。

2

做當*(argv+i)=="lower"你實際上是指針比較,這樣的C字符串。您需要使用strcmp來查看這些字符串的內容是否相等,在這種情況下,strcmp返回零。

1

fgetc返回一個int而不是char。如果你截斷它,這次你會好起來的,但是在處理二進制數據時會遭受可怕的折磨。

+0

我假設你的意思是'getchar(3)'?請注意,這裏的問題是'getchar(3)'返回一個'unsigned char'強制轉換爲'int',並且如果比較的方式是相關代碼的做法,那麼您可以混淆合法字符0xFF和'EOF'。接得好! – cha0site 2012-04-09 18:22:02

相關問題