#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_FILENAME_LEN 256 #define MAX_LINE_LEN 1024 int word_count(char *filename); int char_count(char *filename); int main(int argc, char *argv[]) { char filename[MAX_FILENAME_LEN]; int count; if (argc > 1) { strcpy(filename, argv[2]); } else { strcpy(filename, "input.txt"); } if (strcmp(argv[1], "-w") == 0) { count = word_count(filename); printf("单词数:%d\n", count); } else if (strcmp(argv[1], "-c") == 0) { count = char_count(filename); printf("字符数:%d\n", count); } else { printf("无效的参数\n"); } return 0; } int word_count(char *filename) { FILE *fp = fopen("C:\\Users\\csr\\Desktop\\wordCount\\input.txt", "r"); if (fp == NULL) { printf("文件打开失败\n"); exit(1); } int count = 0; char line[MAX_LINE_LEN]; while (fgets(line, MAX_LINE_LEN, fp)) { char *word = strtok(line, " ,\n\t"); while (word != NULL) { count++; word = strtok(NULL, " ,\n\t"); } } fclose(fp); return count; } int char_count(char *filename) { FILE *fp = fopen("C:\\Users\\csr\\Desktop\\wordCount\\input.txt", "r"); if (fp == NULL) { printf("文件打开失败\n"); exit(1); } int count = 0; char ch; while ((ch = fgetc(fp)) != EOF) { count++; } fclose(fp); return count; }程序流程图
时间: 2024-04-04 18:33:09 浏览: 59
抱歉,我无法展示图片或流程图,但我可以通过文字描述来帮助您理解。
该程序的流程如下:
1. 定义了两个函数,分别为计算单词数和字符数的函数。
2. 在main函数中,获取输入参数和文件名,并根据输入参数调用相应的函数计算单词数或字符数。
3. 在计算单词数的函数中,打开输入文件并逐行读取,使用strtok函数分割每行文本为单词,并统计单词数。
4. 在计算字符数的函数中,同样打开输入文件并逐个字符读取,统计字符数。
5. 最后返回计算结果,并输出到屏幕上。
总的来说,该程序实现了一个简单的命令行工具,用于计算输入文件中的单词数和字符数。
相关问题
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LEN 1024 int main() { char filename[MAX_LEN]; char text[MAX_LEN]; char keyword[MAX_LEN]; int count = 0; printf("请输入文件名:"); scanf("%s", filename); FILE* outfile = fopen(filename, "w"); if (outfile == NULL) { fprintf(stderr, "无法创建文件\n"); return 1; } printf("请输入一段文字:\n"); getchar(); fgets(text, MAX_LEN, stdin); fprintf(outfile, "%s", text); fclose(outfile); printf("请输入要查找的关键字:"); scanf("%s", keyword); FILE* infile = fopen(filename, "r"); if (infile == NULL) { fprintf(stderr, "无法打开文件\n"); return 1; } char line[MAX_LEN]; while (fgets(line, MAX_LEN, infile)) { char* pos = line; while ((pos = strstr(pos, keyword))) { count++; pos++; } } printf("文件中共有 %d 个关键字。\n", count); return 0; }解释一下每一行代码的含义与用途,我看不懂
好的,我来解释一下每一行代码的含义和用途。
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 1024
```
这里是引入头文件和定义常量。`stdio.h` 包含了输入输出函数,`stdlib.h` 包含了一些常用的函数,`string.h` 包含了字符串操作函数。`MAX_LEN` 是定义的一个常量,表示字符串最大长度为 1024。
```
int main() {
char filename[MAX_LEN];
char text[MAX_LEN];
char keyword[MAX_LEN];
int count = 0;
```
定义了 `main` 函数,并声明了存储文件名、文本、关键字和计数变量的数组。
```
printf("请输入文件名:");
scanf("%s", filename);
```
输出提示信息,读取用户输入的文件名。
```
FILE* outfile = fopen(filename, "w");
if (outfile == NULL) {
fprintf(stderr, "无法创建文件\n");
return 1;
}
printf("请输入一段文字:\n");
getchar();
fgets(text, MAX_LEN, stdin);
fprintf(outfile, "%s", text);
fclose(outfile);
```
使用 `fopen` 函数打开文件,并将用户输入的文本写入文件中。`getchar` 函数读取上一个输入操作中的回车符,避免在 `fgets` 函数中读取到回车符。最后关闭文件。
```
printf("请输入要查找的关键字:");
scanf("%s", keyword);
FILE* infile = fopen(filename, "r");
if (infile == NULL) {
fprintf(stderr, "无法打开文件\n");
return 1;
}
char line[MAX_LEN];
while (fgets(line, MAX_LEN, infile)) {
char* pos = line;
while ((pos = strstr(pos, keyword))) {
count++;
pos++;
}
}
printf("文件中共有 %d 个关键字。\n", count);
return 0;
}
```
打开文件并读取文件中的每一行,查找关键字并计数。最后输出关键字的数量,程序结束。
希望这些解释能够帮助你理解代码的含义和作用。
我需要一个代码//把学生信息存放在txt文件中,读取数据,数据放在单链表中。 //要求可以通过ID查询某学生的各科成绩和总分及平均分 //可以通过ID查询某科成绩排名 //可以通过ID查询总分排名。 //成绩一样的排名一样。 #include <stdio.h> struct STU{ long ID; unsigned C; unsigned math; unsigned python; }; int main(void) { struct STU stu[10]; //sort by c+math+python return 0; }
以下是一个示例代码,实现了将学生信息存储在txt文件中,读取数据并将其放入单链表中。同时,还可以通过ID查询某学生的各科成绩和总分及平均分,通过ID查询某科成绩排名,以及通过ID查询总分排名。注意,成绩相同的学生排名也相同。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
#define MAX_ID_LEN 10
#define MAX_SUBJECTS 5
// 学生信息结构体
typedef struct student {
char name[MAX_NAME_LEN]; // 姓名
char id[MAX_ID_LEN]; // 学号
int scores[MAX_SUBJECTS]; // 各科成绩
int total_score; // 总分
float avg_score; // 平均分
struct student *next; // 指向下一个学生的指针
} Student;
// 读取txt文件中的学生信息,返回一个指向链表头的指针
Student* read_students_from_file(char *filename) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("Failed to open file %s\n", filename);
return NULL;
}
Student *head = NULL;
Student *tail = NULL;
char line[100];
while (fgets(line, sizeof(line), fp) != NULL) {
Student *s = (Student*)malloc(sizeof(Student));
sscanf(line, "%s %s %d %d %d %d %d", s->name, s->id, &s->scores[0], &s->scores[1], &s->scores[2], &s->scores[3], &s->scores[4]);
s->total_score = 0;
for (int i = 0; i < MAX_SUBJECTS; i++) {
s->total_score += s->scores[i];
}
s->avg_score = (float)s->total_score / MAX_SUBJECTS;
s->next = NULL;
if (head == NULL) {
head = s;
tail = s;
} else {
tail->next = s;
tail = s;
}
}
fclose(fp);
return head;
}
// 根据学号查找学生,返回一个指向该学生的指针
Student* find_student_by_id(Student *head, char *id) {
Student *p = head;
while (p != NULL) {
if (strcmp(p->id, id) == 0) {
return p;
}
p = p->next;
}
return NULL;
}
// 根据学号和科目编号查找该科目的成绩排名,返回排名
int find_rank_by_subject(Student *head, char *id, int subject) {
Student *p = head;
int rank = 1;
while (p != NULL) {
if (strcmp(p->id, id) != 0 && p->scores[subject] > find_student_by_id(head, id)->scores[subject]) {
rank++;
}
p = p->next;
}
return rank;
}
// 根据学号查找总分排名,返回排名
int find_rank_by_total_score(Student *head, char *id) {
Student *p = head;
int rank = 1;
while (p != NULL) {
if (strcmp(p->id, id) != 0 && p->total_score > find_student_by_id(head, id)->total_score) {
rank++;
}
p = p->next;
}
return rank;
}
int main() {
Student *head = read_students_from_file("students.txt");
// 测试查找学生信息
Student *s = find_student_by_id(head, "1001");
if (s != NULL) {
printf("Name: %s\n", s->name);
printf("ID: %s\n", s->id);
printf("Scores: ");
for (int i = 0; i < MAX_SUBJECTS; i++) {
printf("%d ", s->scores[i]);
}
printf("\n");
printf("Total score: %d\n", s->total_score);
printf("Average score: %.2f\n", s->avg_score);
}
// 测试查找科目排名
int rank = find_rank_by_subject(head, "1001", 2);
printf("Rank of subject 2 for student 1001: %d\n", rank);
// 测试查找总分排名
rank = find_rank_by_total_score(head, "1001");
printf("Rank of total score for student 1001: %d\n", rank);
return 0;
}
阅读全文