在文件c程序中查找大写和小写字符的频率

Finding frequency of characters both upper case and lower case in a file c program

我尝试了很多东西,但是当我选择 2 来分别计算大写和小写时,结果是垃圾,我不知道这有什么问题,虽然不关心小写还是大写如果它仍然可以正常工作。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
  int i,h,k ,count[26] = {0}, nam[26] = {0};
  char c[1000];
  FILE *fptr;
  fptr=fopen("tep1.txt","w");
  if(fptr==NULL){
    printf("Error!");
    exit(1);
  }
  printf("a String please:\n");
  gets(c);
  fprintf(fptr,"%s",c);
  fclose(fptr);
  printf("discern between upper case and lower case? 0=no, 1=yes");
  scanf("%d",&h);

  if(h==0){    
    while (c[i] != '[=10=]'){     
      if (c[i] >= 'a' && c[i] <= 'z') 
        count[c[i]-'a']++;

      if (c[i]>='A' &&c[i]<='Z')
        count[c[i]-'A']++;
      i++;
    }

    for (i = 0; i < 26; i++){
      if (count[i] != 0)
        printf("%c %c appears %d times on file.\n",i+'a',i+'A',count[i]);
    }
    return 0;
  }
  if(h==1){    
    while (c[i]|c[k] != '[=10=]') {      
      if (c[i] >= 'a' && c[i] <= 'z') 
        count[c[i]-'a']++;
      i++;
      if (c[k]>='A' &&c[k]<='Z')
        nam[c[k]-'A']++;
      k++;
    }

    for (i = 0; i < 26; i++){
      if (count[i] != 0)
        printf("%c %c appears %d times on file.\n",i+'a',count[i]);      
    }

    for (k = 0; k < 26; k++){
      if (nam[k] != 0)
        printf("%c %c appears %d times on file.\n",k+'A',nam[k]);      
    }

    return 0;
  }
}

这部分代码问题比较多:

while (c[i]|c[k] != '[=10=]') 
{
  if (c[i] >= 'a' && c[i] <= 'z') 
     count[c[i]-'a']++;
  i++;
  if (c[k]>='A' &&c[k]<='Z')
     nam[c[k]-'A']++;
  k++;
}

你不需要两个计数器;您只需要 countnam 这两个数组。解析每个字母的循环结构应该相同。

从代码中退一步,想想你的循环结构应该做什么。 无论是否注意大小写,都应该以同样的方式遍历该行的字符。

顺便提一下,while 语句中的逻辑是错误的。如果你想要 c[i] 和 c[k] 的任何东西,你会想要

while (c[i] != '[=11=]' && c[k] != '[=11=]')

您的代码所做的是按位或 c[i]c[k] 的值,并查看它们是否等于 '[=17=]',即等于 0。直到ik 都指向一个空字符,这在很长一段时间内不会发生。但同样,循环遍历该行的 while 循环应该与 h == 0 情况下相同。

据我所知,您在任何地方都不需要 k 计数器。

  • 首先,你必须像 i = 0.
  • 这样初始化你的整数
  • 第二件事是计算大写和小写,问题出在printing.In打印函数中,您已经编写了两次 %c 和一次 %d,但只给出了两个参数。
  • 只需替换您的 printf 函数,

    printf("%c %c appears %d times on file.\n",i+'a',count[i]);

    printf("%c appears %d times on file.\n",i+'a',count[i]); 你的问题就迎刃而解了。