今天穿著hacker渾濁馬甲在百度程式設計課堂實訓習題中發現了這個很簡單的問題,就做了下。
為了考慮輸入的是否是數字,結果寫好後竟然超時了。
不過裡面用到的將字串裝換成數字的方法,感覺是個收穫,因此在此做下筆記。
大小寫互換時間限制:1000 ms | 記憶體限制:65535 KB難度:0描述現在給出了一個只包含大小寫字母的字串,不含空格和換行,要求把其中的大寫換成小寫,小寫換成大寫,然後輸出互換後的字串。輸入第一行只有一個整數m(m<=10),表示測試資料組數。
接下來的m行,每行有一個字串(長度不超過100)。輸出輸出互換後的字串,每組輸出佔一行。樣例輸入2AcmACCEPTED
樣例輸出aCMaccepted
超時解題報告:
#include<stdio.h> #include<string.h> #include<stdlib.h> int main() { char *n,m,s[27]; int a,i,len; scanf("%s",&m); n=&m; a=atoi(n); if(a)//輸入的是數字 { while(a--) { scanf("%s",s); len=strlen(s); for(i=0;i<len;i++) { if(s[i]>=65&&s[i]<=90)//大寫時候 { printf("%c",s[i]+32); } else if(s[i]>=97&&s[i]<=122)//小寫時候 printf("%c",s[i]-32); else printf("\nerror!\n"); } printf("\n"); } } else //輸入的不是數字 { printf("data error!\n "); } return 0; }
程式截圖:
如果我按照一般思路來這樣寫,雖然結果不超時但是感覺不夠嚴謹誒。
#include<stdio.h> #include<string.h> int main() { int m,i,len; char s[101]; scanf("%d",&m); while(m--) { scanf("%s",s); len=strlen(s); for(i=0;i<len;i++) { if(s[i]>=65&&s[i]<=90)//大寫時候 { printf("%c",s[i]+32); } else if(s[i]>=97&&s[i]<=122)//小寫時候 printf("%c",s[i]-32); else printf("\nerror!\n"); } printf("\n"); } return 0; }
程式截圖: