如你想把最后一个结束符号0也计算在z变量里,那么循环里
i++if(s[i] == '\0')goto u这两句位置颠倒一下写成:if(s[i] == '')goto ui++
另外,你这代码有改进的地方:
1、代码尽量不要用goto跳转,循环中想要跳出去结束整个循环,用break语句。同理想要跳过本次循环进入下一次循环,可以continue语句。
2、if else执行效率不高,特别是if判断多且字符串长的时候,这里单纯用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]>='A'&&s[i]<= 'Z'){a++continue}
if (s[i]>='a'&&s[i]<='z'){b++continue}
if (s[i]==' '){c++continue}
if (s[i]>='0'&&s[i]<='9'){d++continue}
z++
if (s[i]==0)break//这里是把结束符号也算进z,如不想算进z和z++位置颠倒
}
printf("%d %d %d %d %d",a,b,c,d,z)
}
标准的main函数格式为:
int main(int argc, const char * argv[])
用于存储命令行参数的argv是一组字符串,字符串的个数为argc的值。
所以要打印argv中的值,一般使用如下程序:
int ifor(i = 0 i < argc i ++)
printf("%s\n",argv[i])
这时一个个字符串打印的。没有必要要一个个字符打印。
如果要一个个字符打印,可以使用双重循环:
int i,jfor(i = 0 i < argc i ++)
{
for(j = 0 argv[i][j]!='\0' j ++)//打印一个字符串中的所有字符值。
putchar(argv[i][j])
putchar('\n')
}