题目:读取文件中的字符串,统计从“a”到“z”26个字母各自出现的次数,并将结果放入数组中。如文件中有字符串abcdefgabcdeabc,输出33322110000000000000000000。
思路:这里我用letter[0] - letter[25]分别存储a-z出现的次数。letter[0]=letter[‘a’-‘a’],letter[0]存储a出现的次数;letter[1]=letter[‘b’-‘a’],letter[1]存储b出现的次数;以此类推…
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void) {
char string[200]; /*string数组存放字符串*/
int letter[26] = { 0 }; /*letter数组记录字母出现的次数*/
unsigned int i;
FILE *fp;
errno_t err;
/*打开文件,并判断*/
if ((err = fopen_s(&fp, "data.txt", "r")) != 0) {
printf("\ncan not open the file!\n"); /*若打不开,提示*/
exit(1); /*退出程序*/
}
/*从头到尾读文件*/
while (!feof(fp)) {
/*把文件中字符串放到数组里*/
fscanf_s(fp, "%s", string, 200 * sizeof(char));
/*遍历字符串*/
for (i = 0; i < strlen(string); i++) {
/*若非a~z*/
if (string[i]<'a' || string[i]>'z') {
continue; /*不记录*/
}
letter[string[i] - 'a']++; /*记录a~z出现的次数*/
}
}
fclose(fp); /*关闭文件*/
/*输出记录*/
for (i = 0; i < 26; i++) {
printf("%d ", letter[i]);
}
printf("\n");
return 0;
}
文件data.txt内容:
如果你用的是dev c++,按下面这样写
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void) {
char string[200]; /*string数组存放字符串*/
int letter[26] = { 0 }; /*letter数组记录字母出现的次数*/
unsigned int i;
FILE *fp;
fp = fopen("data.txt", "r");
/*打开文件,并判断*/
if (fp == NULL) {
printf("\ncan not open the file!\n"); /*若打不开,提示*/
exit(1); /*退出程序*/
}
/*从头到尾读文件*/
while (!feof(fp)) {
fscanf(fp, "%s", string, 200 * sizeof(char)); /*把文件中字符串放到数组里*/
/*遍历字符串*/
for (i = 0; i < strlen(string); i++) {
/*若非a~z*/
if (string[i]<'a' || string[i]>'z') {
continue; /*不记录*/
}
letter[string[i] - 'a']++; /*记录a~z出现的次数*/
}
}
fclose(fp); /*关闭文件*/
/*输出记录*/
for (i = 0; i < 26; i++) {
printf("%d ", letter[i]);
}
printf("\n");
return 0;
}