如何用C语言统计中文的字符数

如何用C语言统计中文的字符数,第1张

C中的汉字用“机内码”,一个汉字两字节,最高位都是1,所以可以用下列代码求得一个字符里汉字的个数:
//#include
"stdafxh"//If
the
vc++60,
with
this
line
#include
"stdioh"
int
main(void){
char
a[]="12我34们56都7是来自五a湖c四de海bfg";
int
i,sum;
for(sum=i=0;a[i];i++)
if(a[i]<0)
sum++;//最高位为1(负数)的是一个汉字的一半
printf("There
are
%d
Chinese
characters
in
this
string\n",sum/2);//输出汉字总数
return
0;
}

开设计数变量n,数组变量,利用变量i取值0作为下标检测当前下标对应的数组元素取值是否0,如果不是0,n自加1,i自加1,利用i的当前值访问下一个数组元素,重复这一过程,直到数组元素的取值是0为止,这时的n变量取值就是字符串中包含的字符个数(不算结尾的0)
char a[256]={ "Hello!" }; int i,n;
i=n=0; while ( a[i]!=0 ) { i++; n++; }
printf("字符串%s的长度为%d\n",a,n);
还有一种方法是利用指针而不是下标访问数组元素:
char a[256]={ "Hello!" },p; int n;
p=a; n=0; while ( (p)!=0 ) n++; //也可以写成while ( p ) n++;
printf("字符串%s的长度为%d\n",a,n);

#include <stdioh>
int count_letter(char str)
{
char p = str;
int cnt = 0;
//开始计数
while (p != '\0') {
if ((p >= 'a' && p <= 'z') || (p >= 'A' && p <= 'Z')) {
cnt++;
}
p++;
}
//计数完成

printf("letter cnt:%d\n", cnt); //打印出英文字母总数
return cnt; //计数结果返回
}
int main()
{
char str = "gkdial9-1;J19D-=-=YdlUImf"; //实例字符串
count_letter(str); //调用计数函数
return 0;
}
以上源码。
主要思路为循环到字符串结尾,逐字符判断是否属于字母范围(A到Z或a到z),如果为字母则计数器+1,直到字符为结束符'\0'为止,表示字符串结束,并将结果返回给函数调用者。

我们进行程序编写的时候,经常会遇到统计字符串中各个字符个数的需求。那么如何实现这种功能呢?下面我给大家分享一下。

工具/材料

Visual Studio 2015

01

首先打开Visual Studio软件,新建一个Win32应用程序,并且在项目下新建C语言文件,如下图所示

02

然后我们在C语言文件中导入程序要用到的库文件,如下图所示

03

接下来我们就开始实现字符统计的功能,主要是挨个读取字符串中的字符,然后判断字符的类别,如下图所示

04

最后我们运行程序,输入一个字符以后,你就会发现程序已经自动统计好了各种字符的个数了,如下图所示

int getNum(char str) {     
int num = 0;     
while(str){      
if (str >= 'A' && str <= 'Z')    
num++;     
str++;     
}     
return num;

void main() {  
int num;    
char testStr = "aAbBcCdDeEfF";     
num = getNum(testStr);   
printf("%d\n", num);       
}

#include "stdioh"
#include "stdlibh"
void main()
{
FILE fp;
char ch;
int charCounts=0,numCounts=0;
if((fp=fopen("testtxt","r"))==0)//注意,由于我不知道你想打开的文件的位置和名称,我随意写的一个文件名,你自己要按你文件的路径和名称做修改
{
printf("文件读取失败!\n");
exit(0);
}
while((ch=fgetc(fp))!=EOF)
{
if(ch>='0'&&ch<='9')
numCounts++;
else
charCounts++;

}
printf("该文件中数字字符共有%d个,除数字这外的其它字符共有%d个。\n",numCounts,charCounts);

fclose(fp);

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12893265.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-28
下一篇2025-08-28

发表评论

登录后才能评论

评论列表(0条)

    保存