0

在这个程序中,我想打印出文件中不同字符的实例。输出将包含三个变量,出现次数、字母的十六进制和字母本身。有人可以帮我弄这个吗?我被困住了!

 Results of program should be something like this:
 10 instance  of character 0x4s (O)
 10 instance  of character 0x51 (W)
 10 instance  of character 0x51 (Y)
 2 instances of character 0x65 (a)
 18 instances of character 0x67 (c)
 16 instances of character 0x81 (d)


//here is my program. 
#include <stdio.h>
#include <stdlib.h> 
#include <string.h>

const char FILE_NAME[] = "input.txt";


int main(argc, *argv[]) {

    char temp;   
     char count[255];

FILE *in_file;   
int ch;

fp = fopen(FILE_NAME, "r");
if (in_file == NULL) {
    printf("Can not open %s \n", FILE_NAME);
    exit(0);
}

while (!feof(fp)) {

    ch = fgetc(fp);

if(strchr(count, ch)!= NULL)
{

}

}
printf("%d instance of character (%c)", count);


fclose(in_file);
return (0);
}
4

2 回答 2

1

这就是你想要的(基于你的代码,我有很多评论):

#include <stdio.h>
#include <stdlib.h> 
#include <string.h>
#include <ctype.h>  // you need this to use isupper() and islower()

const char FILE_NAME[] = "input.txt";

int main(int argc,char *argv[]) {
    char temp;   
    unsigned count[52] = {0};  // An array to store 52 kinds of chars
    FILE *fp;   
    int i;

    fp = fopen(FILE_NAME, "r");
    if (fp == NULL) {
        printf("Can not open %s \n", FILE_NAME);
        exit(0);
    }

    while((temp = fgetc(fp)) != EOF) {   // use this to detect eof
        if(isupper(temp))
            count[26+(temp-'A')]++;   // capital letters count stored in 26-51
        if(islower(temp))
            count[temp-'a']++;        // lower letters count stored in 0-25
    }
    fclose(fp);  // When you don't need it anymore, close it immediately.

    for(i = 0; i < 26; i++)
        if(count[i])
            printf("%d instance of character 0x%x (%c)\n", count[i], 'a'+i, 'a'+i);
    for(; i < 52; i++)
        if(count[i])
            printf("%d instance of character 0x%x (%c)\n", count[i], 'A'+i-26, 'A'+i-26);
    return (0);
}
于 2012-10-18T09:41:33.147 回答
0

您的数组count不是字符串,因此使用strchr()它不是一个好主意。此外,它的类型为char,因此对于较大文件的范围非常有限。

您可能应该使用类似unsigned long count[256]. 确保在开始之前将计数初始化为 0。

另外,不要使用feof(). 只需循环调用fgetc(),直到返回的字符(正确地具有 type int)为EOF. 在使用它来索引count增量之前将其转换为积极的东西。

于 2012-10-18T09:05:26.097 回答