i++;if(s[I]= = ' \ 0 ')goto u;if(s[I]= ' \ 0 ')gotou;i++;
此外,您的代碼有壹些改進:
1.盡量不要在代碼中用goto跳轉。如果想跳出循環結束整個循環,使用break語句。同樣,如果想跳過這個循環進入下壹個循環,可以繼續語句。
2.if else執行效率不高,尤其是if判斷多,字符串長的時候。這裏如果簡單的使用判斷,在每個條件成立後增加壹個continue語句++直接跳轉到下壹個循環(後面的判斷就沒必要了)。
3.結束符號也可以直接用0表示。
下面的代碼(有不止壹個方法):
void StringCount(char* s)
{
int a = 0;//大寫字母的數量
int b = 0;//小寫字母的數量
int c = 0;//空格數
int d = 0;//位數
int z = 0;//其他字符的數量
int I =-1;
while(1)
{
++ I;
if(s[I]& gt;= ' A ' & amp& amps[I]& lt;= ' Z '){ a++;繼續;}
if(s[I]& gt;= ' a ' & amp& amps[I]& lt;= ' z '){ b++;繼續;}
if(s[I]= = ' '){ c++;繼續;}
if(s[I]& gt;= ' 0 ' & amp& amps[I]& lt;= ' 9 '){ d++;繼續;}
z++;
if(s[I]= = 0)break;//這裏結束符也包含在Z中,如果不想包含Z,Z和z++的位置就反過來了。
}
printf("%d %d %d %d %d ",a,b,c,d,z);
}