C语言统计文件中的字符数、单词数以及总行数
C语言数据结构统计英文文字每个“单词”出现次数
C语⾔数据结构统计英⽂⽂字每个“单词”出现次数题⽬:假设每⾏⽂字长度不超过80个字符,每个单词由空格分隔,单词长度不超过20个字符。
现在要从键盘上输⼊⼀段英⽂⽂字,当输⼊“stop ”后,结束输⼊过程。
先编程统计在这段⽂字中每个单词出现的个数。
分析:通过空格判断单词,单词存放在结构体当中,search函数检测当前单词是否为重复出现的单词cut函数分隔字符串,使其成为单词#include<stdio.h>#include<string.h>#include<stdlib.h>#include<stdbool.h>#define MAXSIZE 300typedef struct node{char letter[20];int seq;struct node *next;}Node;bool search(Node **L,char a[])//检测单词是否存在{if((*L)->next==NULL)//如果链表当中没有⼀个单词,则默认为当前单词⽆重复return true;Node *p=(*L)->next;while(p!=NULL){//检测单词if(strcmp(p->letter,a)==0)break;elsep=p->next;}if(p!=NULL){++p->seq;return false;//在链表当中查到存在相同的单词}elsereturn true;//没有查到相同的单词}void cut(char a[],Node *L){int n=(int)strlen(a);int i=0;//i在⽂本中⾛,j在链表中的单词⾥⾛Node *rear=L;while(i<n){char temp[20];int j=0;while(a[i]!='')temp[j++]=a[i++];temp[j]='\0';//补全j的最后⼀位++i;//i循环到单词的后⾯空格处,跳过空格if(strcmp(temp,"stop")==0)//遇到stop,函数结束return;bool is_overlap=search(&L, temp);//确认是否存在于节点当中,传⼊L指针的地址if(is_overlap)//如果单词⽆重复,创建⼀个节点存放当前单词{Node *node=(Node *)malloc(sizeof(Node));strcpy(node->letter, temp);node->seq=1;node->next=NULL;rear->next=node;rear=node;}}}void print(Node *art){Node *p=art->next;while(p!=NULL){printf("%s(%d)\t",p->letter,p->seq);p=p->next;}printf("\n");}int main(){char a[MAXSIZE];printf("输⼊⼀串字符,相互之间⽤空格隔开,结尾以stop\n"); gets(a);int n=(int)strlen(a);if(a[n-1]!='')a[n]='';a[n+1]='\0';Node art={"hello",1000};cut(a, &art);print(&art);}。
C语言 统计字符个数(指针)
时间限制:
1000毫秒
内存限制:
32768 K字节
总提次数:
689次
成功提交次数:
455次
判题规则:
严格比较
问题描述
输入一行字符,统计并输出其中数字字符、英文字母和其它字符的个数。
要求:
1、编写一函数void count(char *s,int *pdigit,int *pletter,int *pother),其中s为输入的字符串,*pdigit, *pletter,*pother分别表示字符串中数字、字母和其他字符的个数。
int dight=0;
int letter=0;
int other=0;
gets(s);
count(s,&dight,&letter,&other);
printf("%d %d %d \n",dight,letter,other);
return 0;
}
输入
输入1个字符串。
输出
输出数字、字母和其他字符的个数。每个数后有一空格。
输入样列
wenzhou university 1933
输出样例
4 17 2
出处
ymc
答案:
#include <stdio.h>
#include <string.h>
void count(char s[],int *pdight,int *pletter,int *pother)
{
int n;
int i;
n=strlen(s);
for(i=0;i<n;i++)
单词统计程序 C++
单词统计问题描述文字研究人员需要统计某篇英文小说中某些特定单词的出现次数和位置,试写出一个实现这一目标的文字统计系统。
这称为“文学研究助手”。
要求算法输入:文本文件和词集。
算法输出:单词出现的次数,出现位置所在行的行号(同一行出现两次的只输出一个行号)。
算法要点:(1)文本串非空且以文件形式存放。
(2)单词定义:用字母组成的字符序列,中间不含空格,不区分大小写。
(3)待统计的单词不跨行出现,它或者从行首开始,或者前置一个空格。
(4)数据结构采用二维链表,单词结点链接成一个链表,每个单词的行号组成一个链表,单词结点作为行号链表的头结点。
需求分析用户需求:用户可以通过该程序查询和统计一篇英文文章中某些特定单词出现次数和位置。
功能需求:用户可以输入单词来查询单词出现次数和位置;程序可以正确显示查询结果;用户可以选择是否在一次输出后继续查询;在一次查询中的结果记录到一个二维链表中。
概要设计为达到设计要求,本程序采用二维链表存储单词结点和相关的位置信息。
抽象数据类型:struct node{int col; //行坐标int row; //所在行的列坐标node* next; //指向下一个坐标结点的指针}; //单词坐标坐点类型struct Node{char words[20]; //单词数组node* ptr; //指向单词坐标结点的指针Node* next; //指向下一个单词结点的指针int num; //单词所含字符个数}; //单词结点class TLink{public:TLink() { head = NULL; }//构造函数~TLink()//析构函数{while( head != NULL ){Node* temp;temp = head;head = head -> next;delete temp;}}void Insert( char* Item );//前条件:参数Item[]为一个字符数组。
c语言字符个数统计长字符串中不同字符数
c语言字符个数统计长字符串中不同字符数C语言字符个数统计是指统计一个字符串中字符的个数。
不同字符数指的是一个字符串中不同字符的个数。
下面是一个使用C语言实现字符个数统计和不同字符数统计的代码示例:c#include <stdio.h>#include <string.h>int countChars(char *str) {int count = 0;int len = strlen(str);for (int i = 0; i < len; i++) {if (str[i] != ' ') { 假设空格不算字符count++;}}return count;}int countDiffChars(char *str) {int count = 0;int len = strlen(str);int diff[256] = {0}; 假设字符的ASCII码范围在0~255之间for (int i = 0; i < len; i++) {if (str[i] != ' ' && diff[(int)str[i]] == 0) {count++;diff[(int)str[i]] = 1;}}return count;}int main() {char str[1000];printf("请输入一个字符串:");gets(str); 使用gets函数获取输入的字符串,不建议使用gets函数,因为存在缓冲区溢出的风险int charCount = countChars(str);int diffCharCount = countDiffChars(str);printf("字符个数:%d\n", charCount);printf("不同字符个数:%d\n", diffCharCount);return 0;}上面的代码中,countChars函数用于统计字符串中的字符个数,它遍历字符串中的每个字符,如果字符不是空格,则字符个数加一。
(完整版)C语言统计文件中的字符数、单词数以及总行数
C语言统计文件中的字符数、单词数以及总行数统计文件的字符数、单词数以及总行数,包括:每行的字符数和单词数文件的总字符数、总单词数以及总行数注意:空白字符(空格和tab缩进)不计入字符总数;单词以空格为分隔;不考虑一个单词在两行的情况;限制每行的字符数不能超过1000。
代码如下#include <stdio.h>#include <string.h>int *getCharNum(char *filename, int *totalNum);int main(){char filename[30];// totalNum[0]: 总行数totalNum[1]: 总字符数totalNum[2]: 总单词数int totalNum[3] = {0, 0, 0};printf("Input file name: ");scanf("%s", filename);if(getCharNum(filename, totalNum)){printf("Total: %d lines, %d words, %d chars\n", totalNum[0], totalNum[2], totalNum[1]);}else{printf("Error!\n");}return 0;}/*** 统计文件的字符数、单词数、行数** @param filename 文件名* @param totalNum 文件统计数据** @return 成功返回统计数据,否则返回NULL**/int *getCharNum(char *filename, int *totalNum){FILE *fp; // 指向文件的指针char buffer[1003]; //缓冲区,存储读取到的每行的内容int bufferLen; // 缓冲区中实际存储的内容的长度int i; // 当前读到缓冲区的第i个字符char c; // 读取到的字符int isLastBlank = 0; // 上个字符是否是空格int charNum = 0; // 当前行的字符数int wordNum = 0; // 当前行的单词数if( (fp=fopen(filename, "rb")) == NULL ){perror(filename);return NULL;}printf("line words chars\n");// 每次读取一行数据,保存到buffer,每行最多只能有1000个字符while(fgets(buffer, 1003, fp) != NULL){bufferLen = strlen(buffer);// 遍历缓冲区的内容for(i=0; i<bufferLen; i++){c = buffer[i];if( c==' ' || c=='\t'){ // 遇到空格!isLastBlank && wordNum++; // 如果上个字符不是空格,那么单词数加1isLastBlank = 1;}else if(c!='\n'&&c!='\r'){ // 忽略换行符charNum++; // 如果既不是换行符也不是空格,字符数加1isLastBlank = 0;}}!isLastBlank && wordNum++; // 如果最后一个字符不是空格,那么单词数加1isLastBlank = 1; // 每次换行重置为1// 一行结束,计算总字符数、总单词数、总行数totalNum[0]++; // 总行数totalNum[1] += charNum; // 总字符数totalNum[2] += wordNum; // 总单词数printf("%-7d%-7d%d\n", totalNum[0], wordNum, charNum);// 置零,重新统计下一行charNum = 0;wordNum = 0;}return totalNum;}在D盘下创建文件demo.txt,并输入如下的内容:运行程序,输出结果为:上面的程序,每次从文件中读取一行,放到缓冲区buffer,然后遍历缓冲区,统计当前行的字符和单词数。
WordCount程序(C语言实现)
WordCount程序(C语⾔实现)Word Count 程序GitHub地址:https:///MansonYe/Word-Count⼀、项⽬简介Word Count 是⽤以统计⽂本⽂件的字符数、单词数和⾏数的常⽤⼯具。
⼆、功能分析及实现情况· 基本功能:统计file.c的字符数(实现)统计file.c的单词数(实现)统计file.c的⾏数(实现)· 拓展功能:递归处理⽬录下符合类型的⽂件(实现)显⽰代码⾏、空⾏和注释⾏的⾏数(实现)⽀持通配符(* , ?)(实现)· ⾼级功能:⽀持GUI界⾯并显⽰详细信息(待实现)· 定义: 字符:可显⽰的ASCII码字符,因此不包括空格和‘\n’等控制字符 单词:由⼀串连续英⽂字母组成,遇到英⽂以外为单词的分隔 ⾏:每⾏以分⾏符或结束符为标志,分为三种: 空⾏:本⾏只由⾮显⽰字符组成,若有代码,则不超过⼀个可显⽰字符 代码⾏:本⾏包括多于⼀个字符的代码 注释⾏:本⾏不是代码⾏,且包括注释· 例⼦:如图为⼀个典型的C语⾔⽂本⽂件所有显⽰的字符均为纳⼊字符计算中:如2⾏有19个字符以⾮英⽂字母分隔单词:如10⾏单词数为3,但7⾏单词数为0包含多于⼀个代码的⾏为代码⾏:如10、14、21⾏等均为代码⾏不是代码⾏且包含注释为注释⾏:如4、5、22、24⾏等,6⾏因为在⽂档型注释中顾算注释⾏没有显⽰字符或只有⼀个代码的⾏为空⾏:如1、3、15⾏,但6⾏在⽂本注释中因此不算作空⾏,算作注释⾏三、PSPPSP Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)Planning计划 30 30Estimate· 估计这个任务需要多少时间 10 10Development开发 480 600Analysis· 需求分析 (包括学习新技术) 60 70Design Spec· ⽣成设计⽂档 55Design Review· 设计复审 (和同事审核设计⽂档) 30 50Coding Standard· 代码规范 (为⽬前的开发制定合适的规范) 1010Design· 具体设计 60 65Coding· 具体编码 480 540Code Review· 代码复审 60 75Test· 测试(⾃我测试,修改代码,提交修改) 60 120Reporting报告120 120Test Report· 测试报告3060Size Measurement· 计算⼯作量10 5Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划 30 60四、解题思路及功能实现:字符统计:遍历⽂档字符,通过排除⾮显⽰字符,统计显⽰字符数量;单词统计:遍历⽂档字符,利⽤变量记录字符是否为英⽂字母状态,统计进⼊该状态次数即为单词词数⾏数统计:遍历⽂档以⾏为单位的字符串,遍历次数即为⾏数特殊⾏数统计:遍历⽂档以⾏为单位的字符串,再利⽤指针遍历字符串;⾸先判断是否为代码⾏(优先级最⾼),其次判断是否为注释⾏,由于三种⾏互斥,顾空⾏数为总⾏数减去前两者。
C++统计中英文大小写字母、数字、空格及其他字符个数的方法
C++统计中英⽂⼤⼩写字母、数字、空格及其他字符个数的⽅法本⽂实例讲述了C++统计中英⽂⼤⼩写字母、数字、空格及其他字符个数的⽅法。
分享给⼤家供⼤家参考,具体如下:/** 作者:刘同宾* 完成⽇期:2012 年 11 ⽉ 28 ⽇* 版本号:v1.0* 输⼊描述:* 问题描述:有⼀篇⽂章,共有三⾏⽂字,每⾏有80个字符。
要求分别统计出其中英⽂⼤写字母、⼩写字母、数字、空格以及其他字符的个数。
* 程序输出:* 问题分析:略* 算法设计:略*/#include<iostream>using namespace std;int main(){int i,j,upper,lower,digit,space,other;char text[3][80];upper=lower=digit=space=other=0;for(i=0;i<3;i++){cout<<"请输⼊第"<<i+1<<"⾏(please input line):"<<endl;gets(text[i]); //这是啥情况。
for(j=0;j<80&&text[i][j]!='\0';j++){if(text[i][j]>='A'&&text[i][j]<='Z'){upper++;}else if(text[i][j]>='0'&&text[i][j]<='9'){digit++;}else if(text[i][j]>='a'&&text[i][j]<='z'){lower++;}else if(text[i][j]=' '){space++;}else{other++;}}}cout<<"⼤写字母个数为:"<<upper<<endl<<"⼩写字母个数为:"<<lower<<endl<<"数字个数为:"<<digit<<endl<<"空格个数为:"<<space<<endl<<"其他字符个数为:"<<other<<endl;return 0;}运⾏效果截图如下:希望本⽂所述对⼤家C++程序设计有所帮助。
C++程序测量一个字符串中的单词个数(多种方法)
#include<stdio.h>void main(){char str[81];int i,num=0,word=0;char c;cout>>"please input the string:\n";gets(str);for(i=0;(c=str[i])!='\0';i++){if(c==' ')word=0;else if(word==0){word=1;num++;}}cout>>"There are %d words in the line.\n">>num;}这个练习题不错,如果把空格换成非字符符号,可以用来统计文章中的单词数。
#include<stdio.h>#include<stdlib.h>int main(){char str[50];int word;int n=0;int i;printf("Input:");gets(str);for(i=0;i<50-1;i++){if(str[i]==' '){word=1;}if(word){n++;word=0;}}printf("Output: There are is %d in teh line.\n",n);system("pause");return 0;}给你个思路吧。
设定一个字符数组,或者直接用string对象,从键盘接收一个字符串到该字符数组或字符串对象中。
然后设一个变量i用以遍历字符串,如果遇到第i位是空格或者标点,则空格或标点数加1,并检查第i-1位是否为字母,如果i-1位是字母,说明刚刚遍历过去的是一个单词,则单词数加1,否则(i-1位不是字母)就继续往下走。
当然你还要设三个变量存储空格、标点和单词的数量。
(完整版)C语言统计文件中的字符数、单词数以及总行数
C语言统计文件中的字符数、单词数以及总行数统计文件的字符数、单词数以及总行数,包括:每行的字符数和单词数文件的总字符数、总单词数以及总行数注意:空白字符(空格和tab缩进)不计入字符总数;单词以空格为分隔;不考虑一个单词在两行的情况;限制每行的字符数不能超过1000。
代码如下#include <stdio.h>#include <string.h>int *getCharNum(char *filename, int *totalNum);int main(){char filename[30];// totalNum[0]: 总行数totalNum[1]: 总字符数totalNum[2]: 总单词数int totalNum[3] = {0, 0, 0};printf("Input file name: ");scanf("%s", filename);if(getCharNum(filename, totalNum)){printf("Total: %d lines, %d words, %d chars\n", totalNum[0], totalNum[2], totalNum[1]);}else{printf("Error!\n");}return 0;}/*** 统计文件的字符数、单词数、行数** @param filename 文件名* @param totalNum 文件统计数据** @return 成功返回统计数据,否则返回NULL**/int *getCharNum(char *filename, int *totalNum){FILE *fp; // 指向文件的指针char buffer[1003]; //缓冲区,存储读取到的每行的内容int bufferLen; // 缓冲区中实际存储的内容的长度int i; // 当前读到缓冲区的第i个字符char c; // 读取到的字符int isLastBlank = 0; // 上个字符是否是空格int charNum = 0; // 当前行的字符数int wordNum = 0; // 当前行的单词数if( (fp=fopen(filename, "rb")) == NULL ){perror(filename);return NULL;}printf("line words chars\n");// 每次读取一行数据,保存到buffer,每行最多只能有1000个字符while(fgets(buffer, 1003, fp) != NULL){bufferLen = strlen(buffer);// 遍历缓冲区的内容for(i=0; i<bufferLen; i++){c = buffer[i];if( c==' ' || c=='\t'){ // 遇到空格!isLastBlank && wordNum++; // 如果上个字符不是空格,那么单词数加1isLastBlank = 1;}else if(c!='\n'&&c!='\r'){ // 忽略换行符charNum++; // 如果既不是换行符也不是空格,字符数加1isLastBlank = 0;}}!isLastBlank && wordNum++; // 如果最后一个字符不是空格,那么单词数加1isLastBlank = 1; // 每次换行重置为1// 一行结束,计算总字符数、总单词数、总行数totalNum[0]++; // 总行数totalNum[1] += charNum; // 总字符数totalNum[2] += wordNum; // 总单词数printf("%-7d%-7d%d\n", totalNum[0], wordNum, charNum);// 置零,重新统计下一行charNum = 0;wordNum = 0;}return totalNum;}在D盘下创建文件demo.txt,并输入如下的内容:运行程序,输出结果为:上面的程序,每次从文件中读取一行,放到缓冲区buffer,然后遍历缓冲区,统计当前行的字符和单词数。
统计单词的数量c语言
统计单词的数量c语言【最新版】目录1.引言2.C 语言中的统计单词数量方法3.使用 C 语言统计单词数量的实例4.总结正文一、引言在计算机编程领域,C 语言作为一种广泛应用的高级编程语言,具有重要的地位。
C 语言被广泛应用于操作系统、嵌入式系统、游戏开发等多个领域。
为了更好地掌握和运用 C 语言,本文将为大家介绍如何使用 C 语言编写一个简单的程序来统计单词的数量。
二、C 语言中的统计单词数量方法要使用 C 语言编写一个统计单词数量的程序,首先需要了解 C 语言的基本语法和数据结构。
下面将介绍两种常见的方法来实现单词数量的统计。
1.使用数组和循环我们可以使用一个数组来存储单词,然后通过循环遍历输入的文本,逐个判断字符串是否为单词,并将其添加到数组中。
在循环结束后,数组中的元素个数即为单词的数量。
2.使用字符串和字符串处理函数C 语言中提供了许多字符串处理函数,如 strlen、strcpy 等。
我们可以使用 strlen 函数获取字符串的长度,从而判断字符串是否为单词。
通过遍历输入的文本,我们可以使用这些函数来统计单词的数量。
三、使用 C 语言统计单词数量的实例下面将给出一个简单的 C 语言程序,用于统计输入文本中的单词数量。
```c#include <stdio.h>#include <string.h>#define MAX_LEN 100 // 定义最大长度int main() {char str[MAX_LEN];int count = 0;printf("请输入一段文本:");fgets(str, MAX_LEN, stdin);// 去除换行符str[strcspn(str, "")] = 0;// 遍历文本,统计单词数量for (int i = 0; str[i]!= "0"; i++) {if (str[i] == " ") {// 以空格为分隔符,判断字符串是否为单词if (str[i + 1] == "0") {count++;}}}printf("单词数量:%d", count);return 0;}```四、总结本文介绍了如何使用 C 语言编写一个简单的程序来统计单词的数量。
c语言统计字符个数while语句
C语言作为一门编程语言,具有统计字符个数的功能。
在C语言中,可以通过使用while语句来统计字符的个数。
下面将介绍如何在C语言中使用while语句来完成字符个数的统计。
1. 概述在C语言中,可以通过循环结构来实现对字符个数的统计。
而while 语句作为一种循环结构,可以通过不断地判断条件来实现字符个数的统计。
2. while语句的基本结构while语句的基本结构如下:```cwhile (condition){// 循环体}```其中,condition为判断条件,当条件满足时,执行循环体中的语句;当条件不满足时,退出循环。
3. 统计字符个数的实现在C语言中,可以通过while语句来统计字符的个数。
下面是一个简单的示例:```c#include <stdio.h>int main(){char str[] = "Hello, C language!";int count = 0;int i = 0;while (str[i] != '\0'){count++;i++;}printf("The number of characters in the string is: d\n", count);return 0;}```在上面的示例中,我们定义了一个字符串str,并初始化了count和i 两个变量。
然后通过while语句来遍历字符串str,并在每次循环中对count进行累加,直到遍历完整个字符串。
最后输出count的值,即字符个数。
4. 注意事项在使用while语句统计字符个数时,需要注意以下几点:- 需要对字符数组进行合理的初始化,确保字符串以'\0'结尾。
- 需要定义一个计数变量,用于累加字符个数。
- 需要定义一个索引变量,用于遍历字符串中的每个字符。
- 需要在循环体内对计数变量进行更新,确保字符个数的准确统计。
【C语言程序设计】C语言统计单词个数,单词个数算法
【C语⾔程序设计】C语⾔统计单词个数,单词个数算法在实际⽣活中经常会遇到⼀个问题:写英语作⽂时,常常要求满⾜⼀定的字数。
在以往,要么我们⼀个⼀个地数;要么我们估算⼀⾏的单词数,然后⽤⾏数进⾏估算。
第⼀种⽅法太费时,若是长篇⼤论,那⼏乎是不可能统计的;⽽第⼆种⽅法不太准确。
这就给我们留下了⼀个问题:如何⼜快、⼜准确地统计⼀篇英⽂⽂章中的单词数?算法思想要解决这个问题,最⾃然的算法是,读取⽂章的所有内容,然后⼀个单词⼀个单词地统计,然⽽,我们在这⾥遇到了⼀个难题:程序看不懂英⽂,如何知道什么是⼀个单词,什么不是⼀个单词呢?似乎在这⾥遇到了障碍,可是,如果换个⾓度思考问题,也许会柳暗花明⼜⼀村:⽂章中的单词都是⽤空格间隔开的,换句话说,单词数=空格数+1。
程序不认识单词,但是程序认识空格啊!这样,整个问题实际上转换成了统计⽂章中的空格数。
有了这样的问题转换思路,整个问题就简单多了。
可以先按照这个思路⾃⼰实现,也可以直接看下⾯的代码实现。
程序代码#include <stdio.h>int main(){printf("输⼊⼀⾏字符:\n");char ch;int i,count=0,word=0;while((ch=getchar())!='\n')if(ch=='')word=0;else if(word==0){word=1;count++;}printf("总共有 %d 个单词\n",count);return0;}调试运⾏结果根据程序提⽰,分别输⼊“I love China”和“I love Xichang College”两个字符串代码,程序统计单词后输出结果分别如下所⽰:输⼊⼀⾏字符:I Love China总共有 3 个单词输⼊⼀⾏字符:I Love Peking University总共有 4 个单词总结本实例展⽰了如何对字符数组进⾏操作,类型为字符型的数组称为字符数组,C 语⾔中没有专门的字符串变量,但是有字符数组串常量,所以字符串常量的存储是通过对字符数组的操作来完成的。
(完整版)C语言统计文件中的字符数、单词数以及总行数
C语言统计文件中的字符数、单词数以及总行数统计文件的字符数、单词数以及总行数,包括: 每行的字符数和单词数文件的总字符数、总单词数以及总行数空白字符(空格和tab缩进)不计入字符总数; 单词以空格为分隔;不考虑一个单词在两行的情况;限制每行的字符数不能超过1000。
代码如下#in elude <stdio.h> #in elude <stri ng.h>int *getCharNum(char *filename, int *totalNum);int mai n(){char file name[30];// totalNum[0]: 总行数totalNum[1]: 总字符数totalNum[2]:总单词数int totalNum[3] = {0, 0, 0};prin tf("I nput file n ame:");sca nf("%s", file name);if(getCharNum(filename, totalNum)){printf("Total: %d lines, %d words, %d chars'n", totalNum[0], totalNum[2], totalNum[1]);}else{prin tf("Error!\n");}return 0;}/***统计文件的字符数、单词数、行数* @param file name 文件名* @param totalNum 文件统计数据成功返回统计数据,否则返回NULL* @return**/int *getCharNum(char *file name, i nt *totalNum){FILE *fp; //指向文件的指针char buffer[1003]; //缓冲区,存储读取到的每行的内容int bufferLen; //缓冲区中实际存储的内容的长度int i; //当前读到缓冲区的第i个字符char c; //读取到的字符int isLastBlank = 0; //上个字符是否是空格int charNum = 0; //当前行的字符数int wordNum = 0; // 当前行的单词数if( (fp=fopen(filename, "rb")) == NULL ){perror(file name);return NULL;}prin tf("li ne words chars\n");//每次读取一行数据,保存到buffer,每行最多只能有1000个字符while(fgets(buffer, 1003, fp) != NULL){bufferLe n = strle n( buffer);//遍历缓冲区的内容for(i=0; i<bufferLe n; i++){c = buffer[i];if( c==' '|| c=='\t'){ // 遇到空格!isLastBlank && wordNum++; //如果上个字符不是空格,那么单词数加1isLastBla nk = 1;}else if(c!='\n'&&c!='\r'){ // 忽略换行符charNum++; //如果既不是换行符也不是空格,字符数加1isLastBla nk = 0;}}!isLastBlank && wordNum++; //如果最后一个字符不是空格,那么单词数加 1isLastBlank = 1; //每次换行重置为1// 一行结束,计算总字符数、总单词数、总行数totalNum[0]++; // 总行数totalNum[1] += charNum; // 总字符数totalNum[2] += wordNum; // 总单词数printf("% -7d%-7d%d\n", totalNum[0], wordNum, charNum);//置零,重新统计下一行charNum = 0;wordNum = 0;}return totalNum;}在D盘下创建文件demo.txt ,并输入如下的内容:I am Chin ese. I love my coun try.China has 960 square kilometers of territory.China has a populati on of 1.35 billio n.The capital of China is Beiji ng.By gunge2014-10-12运行程序,输出结果为:In put file n ame: d://demo.txt line words chars1 7 262 7 393 7 334 6 275 0 06 2 77 0 08 1 10Total: 8 lin es, 30 words, 142 chars上面的程序,每次从文件中读取一行,放到缓冲区buffer,然后遍历缓冲区,统计当前行的字符和单词数。
字符串中各类字符数的统计c语言头歌
字符串中各类字符数的统计c语言头歌一、简介字符串中各类字符数的统计是一种非常常见的编程题目,它可以用来计算字符串中的字母、数字、空格、标点等各类字符的个数。
它的基本思想就是从字符串中的每一个字符开始遍历,如果有符合条件的字符就把它加入计数中,最后将计数结果输出出来。
本文介绍如何使用C语言编写统计字符串中各类字符数的程序,让大家在开发中更好地运用这一常用题目。
二、步骤1. 首先,我们需要定义一个函数,用来统计字符串中的字母、数字、空格、标点等各种字符的个数。
2. 其次,我们需要使用循环去遍历字符串,检测每一个字符的类型,如果是字母就将其加入字母的计数中,如果是数字就将其加入数字的计数中,以此类推。
3. 最后,我们需要定义一个返回值,用来将最终统计结果返回出来。
三、实现下面我们就通过代码来实现上面提到的步骤:// 声明函数,用来统计字符串中的字母、数字、空格、标点等各种字符的个数int countChar(char* str){// 定义各种变量int count_letter = 0; // 字母计数int count_number = 0; // 数字计数int count_space = 0; // 空格计数int count_other = 0; // 其它字符计数// 遍历字符串,检测每一个字符的类型while (*str != 0){// 检测字母if ((*str>='a' && *str<='z') || (*str>='A' && *str<='Z')) {count_letter++;}// 检测数字else if (*str>='0' && *str<='9'){count_number++;}// 检测空格else if (*str==' '){count_space++;}// 检测其它字符else{count_other++;}// 字符指针后移动str++;}// 返回统计结果return (count_letter, count_number, count_space,count_other);}// 测试int main(){char s[] = 'Hello, World! I am a good programmer.'; // 定义字符串int (count_letter, count_number, count_space, count_other)= countChar(s); // 统计字符串中的字母、数字、空格、标点等各种字符的个数// 输出统计结果printf('字母有%d个', count_letter);printf('数字有%d个', count_number);printf('空格有%d个', count_space);printf('其它字符有%d个', count_other);return 0;}四、总结本文介绍了如何使用C语言编写统计字符串中各类字符数的程序,希望对此有所帮助。
c语言 统计单词
c语言统计单词在C语言中,统计单词的数量可以通过以下步骤完成:初始化计数器变量为0读取文本文件的每一行对于每一行,将每个单词拆分并检查是否为新单词(即之前未出现过的单词)如果是新单词,增加计数器变量返回计数器的值以下是一个简单的C语言程序,用于统计文本文件中的单词数量:c#include <stdio.h>#include <string.h>#include <ctype.h>#define MAX_WORDS 1000000 // 定义最大单词数#define MAX_WORD_LEN 100 // 定义最大单词长度int main() {FILE *file;char line[1000];char *word = malloc(MAX_WORD_LEN * sizeof(char));int count = 0;int i;int is_new_word = 1;char *words[MAX_WORDS];int num_words = 0;file = fopen("text.txt", "r"); // 打开文件if (file == NULL) {printf("无法打开文件\n");return -1;}while (fgets(line, sizeof(line), file)) { // 读取每一行for (i = 0; i < strlen(line); i++) { // 遍历每一行的每个字符if (isspace(line[i])) { // 如果遇到空格,表示一个单词结束is_new_word = 1; // 重置is_new_word标志为1,表示是新单词} else if (isalpha(line[i])) { // 如果遇到字母,检查是否为新单词if (is_new_word) { // 如果is_new_word为1,表示是新单词words[num_words] = malloc(MAX_WORD_LEN * sizeof(char)); // 为新单词分配内存空间strcpy(words[num_words], word); // 将当前单词复制到新分配的内存空间中num_words++; // 增加单词数量is_new_word = 0; // 重置is_new_word标志为0,表示不是新单词了} else { // 如果is_new_word为0,表示不是新单词,继续读取下一个字符到当前单词中word[strlen(word)] = line[i]; // 将当前字符添加到当前单词的末尾}} else { // 如果遇到其他字符,重置当前单词并继续读取下一个字符到当前单词中word[0] = '\0'; // 重置当前单词为空字符串word[strlen(word)] = line[i]; // 将当前字符添加到当前单词的末尾}}}fclose(file); // 关闭文件printf("总共的单词数量: %d\n", num_words); // 输出总单词数量for (i = 0; i < num_words; i++) { // 输出每个单词及其出现次数(这里只输出一次)printf("%s\n", words[i]);free(words[i]); // 释放内存空间}free(word); // 释放内存空间return 0;}。
C语言代码统计器
摘要本课题的主要任务是开发一款代码行数统计器,专门用于统计C语言或C++语言程序代码文件。
该统计器的主要功能是统计代码文件的文件行数、有效代码行数、注释行数、空白行数,以及计算代码的注释率。
和那些只能统计单个文件的统计器不同,这款统计器能够接受文件夹路径,批量统计整个文件夹的所有文件,包括子文件夹中的有效文件。
这样可以大大的提高统计效率,节约用户的时间,使编程人员能集中更多精力编写程序。
该统计器在测试时统计了大量的文件,基本上没有错误,精度相当高,用户可安全使用。
本课题所用的编译环境是C-free 5,最终结果exe可执行文件。
目录第1章绪论 0第2章需求分析 (1)2.1 可行性分析 (1)2.2 整体功能 (1)第3章关键技术 (2)3.1 文件操作 (2)3.1.1 文件的打开与读取 (2)3.1.2 遍历文件夹 (2)3.2 变量处理 (3)3.3 错误识别与防范 (3)3.3.1 内存错误 (3)3.3.2 用户输入有误 (3)第4章概要设计 (4)4.1.1 路径判断 (4)4.1.2 遍历文件 (5)4.1.3 字符判断 (6)4.1.4 信息统计输出 (7)第5章详细设计 (9)5.1 文件类型判断 (9)5.2 遍历文件夹 (9)5.3 文件字符的判断和变量处理 (10)5.3.1 定义变量 (10)5.3.2 注释标记 (11)5.3.3 Space和tab (11)5.3.4 转义字符 (11)5.3.5 其他字符 (12)第6章设计结果和使用说明 (13)6.1 程序运行界面 (13)6.2 使用说明 (14)第7章总结 (16)致谢 (17)参考文献 (18)附录A (19)第1章绪论随着计算机技术的发展与普及,越来越多的人开始学习编程技术。
而C语言是在国内外广泛使用的一种计算机语言,它凭借自己功能丰富、使用灵活、可移植性强等优点,不仅为计算机专业工作者所使用,还博得了广大计算机应用人员以及计算机爱好者的青睐。
统计单词数(find函数)
1、统计单词数(find函数)(stat.cpp/c/pas)【问题描述】一般的文本编辑器都有查找单词的功能,该功能能快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。
现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在某篇文章中出现的次数和第一次出现的位置。
注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词完全相同(参见样例1),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2)。
【输入】输入文件名为stat.in,2行。
第1行为一个字符串,其中只含字母,表示给定单词;第2行为一个字符串,其中只可能包含字母和空格,表示给定的文章。
【输出】输出文件名为stat.out。
只有一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中位置,位置从0开始);如果单词在文章中没有出现,则直接输出一个整数-1。
【数据范围】1≤单词长度≤10。
1≤文章长度≤1,000,000。
2、统计单词数(一个个字符对比)(stat1.cpp/c/pas)【问题描述】一般的文本编辑器都有查找单词的功能,该功能能快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。
现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在某篇文章中出现的次数和第一次出现的位置。
注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词完全相同(参见样例1),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2)。
【输入】输入文件名为stat.in,2行。
第1行为一个字符串,其中只含字母,表示给定单词;第2行为一个字符串,其中只可能包含字母和空格,表示给定的文章。
【输出】输出文件名为stat.out。
c语言 统计一个字符串中单词的个数
c语言统计一个字符串中单词的个数这个程序可以自动清除多余的空格。
#include "stdio.h"int count_word(char *str);void main(){char str1[80];int sum=0;puts("\n please enter a string");gets(str1);sum=count_word(str1);printf("there are %d words in this sentence",sum);}int count_word(char *str){int count,flag;char *p;count=0;flag=0;p=str;while(*p!='\0')/*当字符串没有到结尾的时候,重头到尾的循环*/{if(*p==' ')/*假如字符串遇到空格,就将flag清零,同时可以过滤掉多余的空格*/flag=0;else if(flag==0)/*当字符串不是空格时,假如flag为0,那么计算器加1,既是遇到空格后的第一个字符时*/{flag=1;/*将flag标记回1,这样在遇到第一个字符后的字符时可以将他过滤掉,直到遇到空格时,在清零*/count++;}p++;}return count;}C语言编程题求教----输入一个字符统计其中的单词个数输入一串字符统计其中的单词个数。
*/各个单词间用空格隔开空格数可以是多个/*例子:Input:Let's go to room 209count=5这是我做的程序:#include <stdio.h>int main(void){char ch;int c,m;printf("Input words:");c=1;while((ch=getchar())!='\n'){if(ch==' ')c++;}printf("count=%d\n",c);return 0;}但是如果是多个空格就要多统计出单词个数来。
C语句统计电脑文件夹的文件个数算法
C语句统计电脑文件夹的文件个数算法没事无聊写着玩的,也就是熟练运用API而已,没什么技术可言...[cpp]#include#include#include#include#include#includeusing namespace std;static int count=0; //记录文件个数void FindInAll(string & Path,fstream & outfile){string szFind;szFind=Path;szFind+="*.*";WIN32_FIND_DA TA FindFileData;//WIN32_FIND_DA TA结构包含文件的全部信息HANDLE hFind=FindFirstFile(szFind.c_str(),& FindFileData);//FindFirstFile根据文件名查找文件帝尊:/doc/7816625328.html,if(hFind==INV ALID_HANDLE_V ALUE)return;do{if(FindFileData.dwFileAttributes & FILE_A TTRIBUTE_DIRECTORY) //如果找到的是目录,则进入此目录进行递归{string szFile;//去掉目录中的.和..目录szFile=Path+FindFileData.cFileName+"\\";string test=szFile.substr(szFile.length()-3,szFile.length());if(test=="\\.\\"||test=="..\\")continue;FindInAll( szFile, outfile);}else //找到的是文件{string szFile;szFile=Path+FindFileData.cFileName;outfile<<szfile<<endl;< p="">::count=::count+1;}}while(FindNextFile(hFind,& FindFileData));FindClose(hFind);}int main(){//用来记录程序运行所花时间天骄无双:/doc/7816625328.html,clock_t start,finish;double totaltime;start=clock();//计时开始cout<<"****************************************************** *****"<<endl;< p="">cout<<"---------------Created By Cryking 2012.11.02---------------"<<endl;< p="">cout<<"本程序自动遍历电脑所有文件(包括隐藏文件),时间较长,请耐心等待..."<<endl;< p="">cout<<"****************************************************** *****"<<endl;< p="">fstream outfile("allfile.txt",ios::out);cout<<"----------------遍历磁盘所有文件开始:-----------------------"<<endl;< p="">outfile<<setw(3)<<"------遍历磁盘所有文件开始:-----------"<<endl;< p="">//遍历整个电脑的磁盘int DSLength = GetLogicalDriveStrings(0,NULL);//得到驱动器总长度char * Path=new char[DSLength];GetLogicalDriveStrings(DSLength,Path);//得到第一个驱动器地址信息while(Path!=NULL){//直接遍历D盘所有文件斩龙:/doc/7816625328.html,if((string)Path=="") //路径出错break;//跳出循环cout<<"正在遍历"<<path<<"盘文件,请等待..."<<endl;< p=""> FindInAll((string)Path,outfile);Path=Path+strlen(Path)+1;//根据当前驱动器地址获得下一个驱动器地址}locale::global(locale("C"));finish=clock();//计时结束totaltime=(double)(finish-start)/CLOCKS_PER_SEC;outfile<<setw(3)<<"------遍历磁盘所有文件结束-----------"<<endl;< p="">outfile<<setw(3)<<"本次遍历所花时间:"<<totaltime<<"秒"<<endl;< p="">outfile<<setw(3)<<"本电脑共有文件数:"<<::count<<endl;< p="">outfile<<setw(3)<<"------------遍历完成---------------"<<endl;< p="">outfile.close();cout<<"遍历完成,请查看该目录下的allfile.txt文件!"<<endl;< p="">system("pause");return 0;}程序运行的时间没我想象的那么慢,用了递归,而且所有文件路径信息全写到文件了(嘿嘿,貌似可以用来干些坏事··),运行完后文件大概有30M,如果用记事本打开的话有点慢,建议用UE打开,看看我的结果天骄无双:/doc/7816625328.html,</endl;<></setw(3)<<"------------遍历完成---------------"<<endl;<> </setw(3)<<"本电脑共有文件数:"<<::count<<endl;<></setw(3)<<"本次遍历所花时间:"<<totaltime<<"秒"<<endl;<></setw(3)<<"------遍历磁盘所有文件结束-----------"<<endl;<></path<<"盘文件,请等待..."<<endl;<></setw(3)<<"------遍历磁盘所有文件开始:-----------"<<endl;<></endl;<></endl;<></endl;<></endl;<></endl;<></szfile<<endl;<>。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言统计文件中的字符数、单词数以及总行数
统计文件的字符数、单词数以及总行数,包括:
每行的字符数和单词数
文件的总字符数、总单词数以及总行数
注意:
空白字符(空格和tab缩进)不计入字符总数;
单词以空格为分隔;
不考虑一个单词在两行的情况;
限制每行的字符数不能超过1000。
代码如下
#include <stdio.h>
#include <string.h>
int *getCharNum(char *filename, int *totalNum);
int main(){
char filename[30];
// totalNum[0]: 总行数totalNum[1]: 总字符数totalNum[2]: 总单词数
int totalNum[3] = {0, 0, 0};
printf("Input file name: ");
scanf("%s", filename);
if(getCharNum(filename, totalNum)){
printf("Total: %d lines, %d words, %d chars\n", totalNum[0], totalNum[2], totalNum[1]);
}else{
printf("Error!\n");
}
return 0;
}
/**
* 统计文件的字符数、单词数、行数
*
* @param filename 文件名
* @param totalNum 文件统计数据
*
* @return 成功返回统计数据,否则返回NULL
**/
int *getCharNum(char *filename, int *totalNum){
FILE *fp; // 指向文件的指针
char buffer[1003]; //缓冲区,存储读取到的每行的内容
int bufferLen; // 缓冲区中实际存储的内容的长度
int i; // 当前读到缓冲区的第i个字符
char c; // 读取到的字符
int isLastBlank = 0; // 上个字符是否是空格
int charNum = 0; // 当前行的字符数
int wordNum = 0; // 当前行的单词数
if( (fp=fopen(filename, "rb")) == NULL ){
perror(filename);
return NULL;
}
printf("line words chars\n");
// 每次读取一行数据,保存到buffer,每行最多只能有1000个字符
while(fgets(buffer, 1003, fp) != NULL){
bufferLen = strlen(buffer);
// 遍历缓冲区的内容
for(i=0; i<bufferLen; i++){
c = buffer[i];
if( c==' ' || c=='\t'){ // 遇到空格
!isLastBlank && wordNum++; // 如果上个字符不是空格,那么单词数加1
isLastBlank = 1;
}else if(c!='\n'&&c!='\r'){ // 忽略换行符
charNum++; // 如果既不是换行符也不是空格,字符数加1
isLastBlank = 0;
}
}
!isLastBlank && wordNum++; // 如果最后一个字符不是空格,那么单词数加1
isLastBlank = 1; // 每次换行重置为1
// 一行结束,计算总字符数、总单词数、总行数
totalNum[0]++; // 总行数
totalNum[1] += charNum; // 总字符数
totalNum[2] += wordNum; // 总单词数
printf("%-7d%-7d%d\n", totalNum[0], wordNum, charNum);
// 置零,重新统计下一行
charNum = 0;
wordNum = 0;
}
return totalNum;
}
在D盘下创建文件demo.txt,并输入如下的内容:
运行程序,输出结果为:
上面的程序,每次从文件中读取一行,放到缓冲区buffer,然后遍历缓冲区,统计当前行的字符和单词数。
fgets()函数用于从文件中读取一行或指定个数的字符,其原型为:
char * fgets(char *buffer, int size, FILE * stream);
参数说明:
buffer为缓冲区,用来保存读取到的数据。
size为要读取的字符的个数。
如果该行字符数大于size-1,则读到size-1 个字符时结束,并在最后补充' \0';如果该行字符数小于等于size-1,则读取所有字符,并在最后补充'\0'。
即,每次最多读取size-1 个字符。
读取的字符包括换行符。
stream为文件指针。
有的读者问,为什么不使用getc(),每次从文件中读取一个字符,也无需开辟缓冲区。
这样没有问题,但是在处理换行时要注意跨平台问题,因为不同的平台对文本文件换行的处理不一样,Linux以'\n'为换行符,Windows以'\n\r'为换行符,Mac又以'\r\n'为换行符。
所以,使用getc()函数处理换行时比较麻烦。
这里去繁就简,通过fgets()读取整行数据,然后再处理每个字符,直接忽略'\n'和'\r'。
注意:由于每行的结尾会有最多2个字节长度的换行符,fgets()还会添加NUL,所以缓冲区的长度至少为1003,才能容纳每行1000个字符,否则strlen()可能返回垃圾值。
请看代码第43行,打开文件出错时,返回NULL,而不是生硬的exit()。
这样可以通知主调函数发生了错误,让主调函数做出适当的处理,或者通知用户,提高软件的用户体验。
——C语言中文网。