用C编写程序,输入一行语句(英文),统计其中单词的个数。 1)英文单词之间用空格(两个单词之间可能存在多个空格符)分割。 2)英文单词之间用空格、逗号、句号、感叹号等符号进行分割。
时间: 2023-06-18 20:07:11 浏览: 131
下面是一个简单的C程序,可以实现输入一行英文语句,统计其中单词的个数:
```c
#include <stdio.h>
#include <ctype.h>
int main()
{
char sentence[1000];
int count = 0;
int i;
printf("请输入一个英文语句:");
fgets(sentence, 1000, stdin);
for (i = 0; sentence[i] != '\0'; i++) {
if (isalpha(sentence[i])) {
while (isalpha(sentence[i])) {
i++;
}
count++;
}
}
printf("单词个数为:%d\n", count);
return 0;
}
```
程序中使用了 `fgets()` 函数来读入一行英文语句,然后使用循环遍历字符串中的每个字符,如果是字母,则继续寻找下一个非字母字符,这样就可以统计出单词的个数。
需要注意的是,程序中使用了 `ctype.h` 头文件中的 `isalpha()` 函数来判断字符是否为字母。如果需要将逗号、句号、感叹号等符号作为单词的分隔符,可以在判断字母的条件中添加相应的判断。
相关问题
用C语言编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
以下是两种用C语言编写程序统计一行字符中单词个数的例子:
1.使用while循环和if语句逐个字符检索,统计单词数。
```c
#include <stdio.h>
int main() {
int sum=0;//字符总数
char a;//单字检索
while(1)//死循环在使用时注意与break搭配
{
scanf("%c",&a);
if(a=='\n') break;
else if(a!=' ')//确保开始时符号不是空格或回车
{
sum++;//检索首字母,统计单词数
while(1)//单词检索
{
scanf("%c",&a);
if(a==' '||a=='\n')//检索到词尾,这样就形成了两空格夹一个单词的形式, break; //解决了単词间空格个数不定问题
}
}
if(a=='\n') break;//只有当单词后为回车时结束两层循环
}
printf("%d",sum);
return 0;
}
```
2.使用字符数组和for循环逐个字符判断,统计单词数。
```c
#include <stdio.h>
int main() {
char a[1000];//字符数组
gets(a);//获取字符串
int i;//循环变量
int l;//记录字符串长度
int num = 0;//单词数量
for(i=0;a[i]!='\0';i++);//记录字符串长度
l=i;
for(i=0;i<l;i++)//循环判断
{
if(a[i]!=' ' && a[i+1]==' ')//符合[?][空格]的情况
num++;
if(a[i]!=' ' && a[i+1]=='\0')//符合[?]['\0']的情况
num++;
}
printf("%d\n",num);
return 0;
}
```
编写一个程序用于统计一个英文文档中的英文单词、英文字母、数字字符、空格字符、回车字符、标点符号和其他字符的个数; 2)英文文档以txt形式存在,通过命令行参数的形式将英文文档的路径告知子任务1程序,子任务1程序完成统计后生成统计结果文件; 3)子任务1完成统计任务后,以一定的格式将统计结果保存在一个txt形式的结果文件中; 4)子任务1程序提供两种处理模式: 细节模式:该模式下子任务1程序完成统计后,将详细统计结果输出到屏幕上,同时将统计结果输出到txt结果文件中; 概要模式:子任务1程序完成统计后,将统计结果详细信息输出到txt结果文件中,仅在屏幕上输出如下概要信息: 已完成“XXXX”文件的统计,统计结果保存在文件“XX://XXXX//XXXX.txt”中! 提示语句中前面的“XXXX”表示被统计文件的文件名,后面的“XX://XXXX//XXXX.txt”表示结果文件的完整存储路径(绝对路径); 5)子任务1的结果文件的命名规范,统计结果保存格式可自行设计; 6)用户可以通过命令行参数对程序处理模式进行选择,处理逻辑自行设计。用C语言,不能通过命令行参数实现输入,而是在程序里通过scanf输入。不要命令行参数输入!!!不要!
好的,你可以参考下面的代码实现对英文文档的统计:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_FILENAME_LEN 256
#define MAX_LINE_LEN 1024
// 定义统计结果结构体
struct CountResult {
int word_count; // 英文单词个数
int letter_count; // 英文字母个数
int digit_count; // 数字字符个数
int space_count; // 空格字符个数
int newline_count; // 回车字符个数
int punct_count; // 标点符号个数
int other_count; // 其他字符个数
};
// 统计文档中的字符个数
struct CountResult count_chars(const char *filename) {
struct CountResult result = {0, 0, 0, 0, 0, 0, 0};
FILE *fp;
char line[MAX_LINE_LEN];
int c;
int i;
// 打开文件
fp = fopen(filename, "r");
if (fp == NULL) {
fprintf(stderr, "Error: cannot open file '%s'\n", filename);
exit(1);
}
// 逐行读取文件
while (fgets(line, MAX_LINE_LEN, fp) != NULL) {
// 统计每行的字符个数
for (i = 0; line[i] != '\0'; i++) {
c = line[i];
if (isalpha(c)) {
result.letter_count++;
} else if (isdigit(c)) {
result.digit_count++;
} else if (isspace(c)) {
result.space_count++;
if (c == '\n') {
result.newline_count++;
}
} else if (ispunct(c)) {
result.punct_count++;
} else {
result.other_count++;
}
}
// 统计每行的单词个数
char *p = line;
while (*p != '\0') {
// 跳过空格和标点符号
while (*p != '\0' && !isalnum(*p)) {
p++;
}
// 统计单词个数
if (*p != '\0') {
result.word_count++;
while (*p != '\0' && isalnum(*p)) {
p++;
}
}
}
}
// 关闭文件
fclose(fp);
return result;
}
int main() {
char filename[MAX_FILENAME_LEN];
struct CountResult result;
int mode;
// 读取文件名和处理模式
printf("请输入文件名:");
scanf("%s", filename);
printf("请选择处理模式(1-细节模式,2-概要模式):");
scanf("%d", &mode);
// 统计字符个数
result = count_chars(filename);
// 输出统计结果
FILE *outfp = fopen("count_result.txt", "w");
if (outfp == NULL) {
fprintf(stderr, "Error: cannot create count_result.txt\n");
exit(1);
}
if (mode == 1) { // 细节模式
printf("文件'%s'中的统计结果:\n", filename);
printf("单词个数:%d\n", result.word_count);
printf("英文字母个数:%d\n", result.letter_count);
printf("数字字符个数:%d\n", result.digit_count);
printf("空格字符个数:%d\n", result.space_count);
printf("回车字符个数:%d\n", result.newline_count);
printf("标点符号个数:%d\n", result.punct_count);
printf("其他字符个数:%d\n", result.other_count);
fprintf(outfp, "文件'%s'中的统计结果:\n", filename);
fprintf(outfp, "单词个数:%d\n", result.word_count);
fprintf(outfp, "英文字母个数:%d\n", result.letter_count);
fprintf(outfp, "数字字符个数:%d\n", result.digit_count);
fprintf(outfp, "空格字符个数:%d\n", result.space_count);
fprintf(outfp, "回车字符个数:%d\n", result.newline_count);
fprintf(outfp, "标点符号个数:%d\n", result.punct_count);
fprintf(outfp, "其他字符个数:%d\n", result.other_count);
} else if (mode == 2) { // 概要模式
printf("已完成'%s'文件的统计,统计结果保存在文件'count_result.txt'中!\n", filename);
fprintf(outfp, "文件名:%s\n", filename);
fprintf(outfp, "单词个数:%d\n", result.word_count);
fprintf(outfp, "英文字母个数:%d\n", result.letter_count);
fprintf(outfp, "数字字符个数:%d\n", result.digit_count);
fprintf(outfp, "空格字符个数:%d\n", result.space_count);
fprintf(outfp, "回车字符个数:%d\n", result.newline_count);
fprintf(outfp, "标点符号个数:%d\n", result.punct_count);
fprintf(outfp, "其他字符个数:%d\n", result.other_count);
} else {
fprintf(stderr, "Error: invalid mode '%d'\n", mode);
exit(1);
}
// 关闭文件
fclose(outfp);
return 0;
}
```
上面的代码中,我们定义了一个结构体CountResult用于存储统计结果。然后我们实现了一个count_chars函数,用于统计文件中的字符和单词个数。最后,根据用户选择的处理模式,输出统计结果到屏幕和结果文件中。
需要注意的是,在从scanf函数中读取字符串时,我们需要使用%s格式字符串,并且需要确保读取到的字符串不超过MAX_FILENAME_LEN的长度。
阅读全文