c语言字符串遍历不到最后一个字符,求大佬们帮帮忙

Python010

c语言字符串遍历不到最后一个字符,求大佬们帮帮忙,第1张

你想把最后一个结束符号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 i

for(i = 0 i < argc i ++)

    printf("%s\n",argv[i])

这时一个个字符串打印的。没有必要要一个个字符打印。

如果要一个个字符打印,可以使用双重循环:

int i,j

for(i = 0 i < argc i ++)

{

    for(j = 0 argv[i][j]!='\0' j ++)//打印一个字符串中的所有字符值。

        putchar(argv[i][j])

    putchar('\n')

}

看你问题演示,是统计一段英文文字中,不同单词出现次数(但world明明只出现1次,你演示代码却输出的是2)。

如想统计一段文件中的英文单词出现次数。需实现以下功能:

一、遍历字符串,词全部转换为大写或者小写

二、大小写转换,把数组单累加统计每个单词数量(识别同一个单词不同大小写)。

三、遍历单词数组,。(可遍历到第一个单词作为当前统计对象,之后每遍历到相同单词,就将对应变量计数+1,并将该单词字符串置0)。

思路:可先用fopen打开文件流,之后用fgets把全文读出到字符串变量。

之后两个选择:

1、直接变量字符串,遇字母作为一个单词开始,遇非字母作为一个字母结束,这样把所有单词,拆出来放到字符串数组中。(大小写转换可同时进行)。

2、变量字符串将所有标点符号全部替换成空格,再用fprintf写入覆盖原文件,再用循环fscanf(返回-1表示读取结束),将所有以空格间隔的单词直接读取到字符串数组。

最后变量字符串数组。