c语言编写程序:在一给定的文件中查找单词,输出单词在各行出现的次数。待查找的单词不超过10个,每个单词的字符数也不超过10。文件中每行字符数不超过100。注意: 1. 单词中除了字母、数字外有可能包含其它字符,但不包含空格符; 2. 单词大小写查找相关; 3. 不考虑单词重叠查找,例如:待查找单词为"aa",假如文件第一行为"the word aaaaaa",则单词"aa"在第一行出现了三次。 【输入形式】 假设要处理的文件保存在当前目录下,文件名为:in.c。 待查找的单词从控制台输入,各单词间以一个空格分隔,最后一个单词后有回车换行。 【输出形式】 将单词出现的次数输出到当前目录下的found.txt文件中,每个单词独占一行:先输出单词,后跟冒号":",最后是出现的次数。每行出现次数用"行号,在该行出现次数"表示,若在多行出现,则次数之间用";"分隔,最后一个出现次数后也带分号。若查找不到单词,则只输出单词和冒号。
时间: 2024-02-13 18:05:11 浏览: 95
C语言程序设计-分别统计字符串中字母、数字、空格和其他字符出现的次数(字符长度小于80);.c
5星 · 资源好评率100%
好的,我会尽力回答你的问题。关于你提出的问题,我可以给出以下C语言程序代码参考:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_WORD_LEN 10
#define MAX_LINE_LEN 100
#define MAX_WORDS 10
/* 储存单词出现次数的结构体 */
struct word_info {
char word[MAX_WORD_LEN + 1];
int line_count[MAX_LINE_LEN];
int count;
};
int main()
{
/* 打开文件 */
FILE *fp_in = fopen("in.c", "r");
if (!fp_in) {
fprintf(stderr, "Failed to open input file.\n");
return 1;
}
/* 读入待查找的单词 */
char words[MAX_WORDS][MAX_WORD_LEN + 1];
int num_words = 0;
while (scanf("%s", words[num_words]) == 1) {
num_words++;
if (num_words >= MAX_WORDS) {
fprintf(stderr, "Too many words to search!\n");
return 1;
}
if (getchar() == '\n') {
break;
}
}
/* 初始化单词信息数组 */
struct word_info word_infos[MAX_WORDS];
for (int i = 0; i < num_words; i++) {
strcpy(word_infos[i].word, words[i]);
word_infos[i].count = 0;
memset(word_infos[i].line_count, 0, sizeof(word_infos[i].line_count));
}
/* 逐行读取文件 */
char line[MAX_LINE_LEN + 1];
int line_num = 1;
while (fgets(line, sizeof(line), fp_in)) {
/* 逐个检查每个单词 */
char *token = strtok(line, " \t\r\n");
while (token) {
for (int i = 0; i < num_words; i++) {
/* 不区分大小写,使用stricmp函数 */
if (stricmp(token, word_infos[i].word) == 0) {
word_infos[i].count++;
word_infos[i].line_count[line_num - 1]++;
}
}
token = strtok(NULL, " \t\r\n");
}
line_num++;
}
/* 关闭文件 */
fclose(fp_in);
/* 输出结果到文件 */
FILE *fp_out = fopen("found.txt", "w");
if (!fp_out) {
fprintf(stderr, "Failed to open output file.\n");
return 1;
}
for (int i = 0; i < num_words; i++) {
fprintf(fp_out, "%s:", word_infos[i].word);
if (word_infos[i].count == 0) {
fprintf(fp_out, "\n");
continue;
}
for (int j = 0; j < line_num - 1; j++) {
if (word_infos[i].line_count[j] > 0) {
fprintf(fp_out, " %d,%d;", j + 1, word_infos[i].line_count[j]);
}
}
fprintf(fp_out, "\n");
}
fclose(fp_out);
return 0;
}
```
这个程序会从文件 `in.c` 中读取文本内容,逐个检查待查找的单词,并记录单词在每行出现的次数,最终将结果输出到文件 `found.txt` 中。其中,`MAX_WORD_LEN` 定义了单词的最大长度,`MAX_LINE_LEN` 定义了文件中每行的最大长度,`MAX_WORDS` 定义了最多可以查找的单词个数。你可以根据实际情况修改这些值。
程序中使用了一个结构体 `word_info` 来储存单词出现的信息,包括单词本身、总出现次数和在各行出现的次数。结构体数组 `word_infos` 存储了所有待查找的单词的信息。
在逐行读取文件时,程序使用 `strtok` 函数逐个取出每个单词,并与待查找的单词逐个比较,如果匹配就更新相应的信息。
最后,程序将结果输出到文件 `found.txt` 中。对于每个单词,先输出单词本身,后跟冒号,然后是出现的次数。每行出现次数用"行号,在该行出现次数"表示,若在多行出现,则次数之间用";"分隔,最后一个出现次数后也带分号。如果查找不到单词,则只输出单词和冒号。
希望这个程序能够帮到你。如果你有其他问题,请随时提出。
阅读全文