我需要创建一个程序来读取文件并存储所有字母的计数,处理大写和小写字母相同。到目前为止我得到了这个:
FILE *input;
int letter=0;
char words;
int typeofletter[letter];
input = fopen("greatgatsby.txt", "r");
while(fscanf(input, "%c", &words) != EOF)
{
if ((words>='A')&&(words<='z'))
{
letter++;
}
}
如何将每个字母的数量存储到数组中?
答案 0 :(得分:2)
创建一个大小为26的数组来存储数据。
int lettercount[26] = {0};
您可以逐个字符地阅读文件的内容。当您找到字母表中的字母时,增加字母数。
int c;
while ( (c = fgetc(input)) != EOF )
{
if ( isalpha(c) )
{
++(lettercount[tolower(c)-'a']);
}
}
答案 1 :(得分:1)
您应该使用ctype.h
中的函数/宏来诊断和转换字符。下面,isalpha()
用于判断字符是否为字母,toupper()
用于将小写字母转换为大写字母。
由于ASCII(假设)中的字母由连续数字表示,从任何大写字母(或任何小写字母中的“a”)减去“A”的值将给出0到25之间的值,该值对应于该字母并且可以用作字母数组数组的索引。
如果您的字符集不是 ASCII,那么这将变得更加困难,超出了简单编程示例的范围。
以下是一个完整的工作示例。
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#define N_LETTERS (26)
int main(int argc, char *argv[])
{
FILE *fp;
int counts[N_LETTERS] = {0};
int inchar;
int i;
/* We expect a filename on the command line */
if(argc!=2) {
fprintf(stderr, "Supply a filename as an argument.\n");
exit(EXIT_FAILURE);
}
/* Open the file, bug out on error. */
fp = fopen(argv[1], "r");
if( fp==NULL ) {
fprintf(stderr, "Failed to open file '%s'.\n", argv[1]);
exit(EXIT_FAILURE);
}
/* This is the part you're most interested in */
while( (inchar = fgetc(fp)) != -1 ) { /* Read chars until error or EOF */
if( isalpha(inchar) ) { /* Only count letters */
i = toupper(inchar) - 'A'; /* Convert letter to index 0-25 */
counts[i]++; /* Increment count for letter */
}
}
/* Close the file */
fclose(fp);
/* Print out the results */
for(i=0; i<N_LETTERS; i++) {
printf("Count of letter '%c': %d\n", 'A'+i, counts[i]);
}
return EXIT_SUCCESS;
}
答案 2 :(得分:1)
你可能需要这个(快速和脏,基于你的版本,没有错误检查,文件没有关闭,没有测试)
FILE *input;
int letter=0;
char words;
int typeofletter[26];
input = fopen("greatgatsby.txt", "r");
while(fscanf(input, "%c", &words) != EOF)
{
if ((words >= 'a') && (words <= 'z'))
{
words -= 'a'-'A' ; // convert to up upper case
}
if ((words >= 'A') && (words <= 'Z'))
{
typeofletter[word - 'A']++;
}
}
答案 3 :(得分:-3)
我必须指出的唯一问题是数组已静态设置并且其大小已设置,无法动态更改。
您最好使用其他顺序容器类型,例如c ++ vector。例如:
int Main(int argc, char * argc[])
{
//.... preceding code
FILE * OpenedFile; //Get the file and open it
vector<char> ChrVec;
for(/*EACH LETTER*/)
{
ChrVec.push_back(/*LETTERPOINTER*/ *p);
}
}