使用C语言编写记录录入一段文字中的字符数和单词数
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++)
编程实现输入一串英文
编程实现输入一串英文,统计其中各单词出现的个数(不区分大小写字母),以“000”作为字符串输入结束标志,例如:Twinkle twinkle little star 000(回车)twinkle little star2 1 1((这一学期刚学C语言,课后题如上,我的代码如下,总是出错,也不知道为什么,刚学到指针,请高手帮我找一下错误,若错误太多无法更正,就请附上您的代码,谢谢了。
))#include<stdio.h>#include<string.h>int main(){char str[100],ch;char *s2[30]; /*s2存放单词(不重复)*/char s3[30],*p=s3;inti,j,k=0,flag1,flag2,count1=0,white=1,a[30]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0};FILE *file;file=fopen("string.txt","w+");printf("Input a string of English:\n");gets(str);fputs(str,file);rewind(file);while((ch=fgetc(file))!='0') /*统计文件中有多少个单词*/{if((ch==' ')||(ch=='\t')||(ch=='\n'))white++;else{if(white){white=0;count1++;}}}rewind(file);for(i=0;i<count1;i++){flag1=0; /*是否有重复单词*/flag2=0; /*是否遇到空白字符*/p=s3;while(ch=fgetc(file)){if((ch!=' ')&&(ch!='\t')&&(ch!='0')){if((ch>64)&&(ch<91)) /*大写字母变小写*/{ch=ch+32;}*p++=ch;}else{flag2=1; /*遇到空白字符*/*p='\0';for(j=0;j<k;j++) /*k为s2中的单词个数*/{if(strcmp(s3,s2[j])==0){flag1=1; /*有重复单词*/a[j]++;break;}}if(flag1==0) /*如果单词不重复*/{s2[k]=s3;a[k]++;k++;}}if(flag2==1) /*如果遇到空白字符,则开始查询下一单词,跳出while循环*/{break;}}while(((ch=fgetc(file))==' ')||(ch=='\t')); /*吞掉多余的空白字符*/fseek(file,-1,1); /*后退一格,继续读*/}for(i=0;i<k;i++){printf("%s\t",s2[i]);}printf("\n");for(i=0;i<k;i++){printf("%d\t",a[i]);}printf("\n");fclose(file);return 0;}我来帮他解答2011-10-29 12:03满意回答。
c语言输入数据的方法
c语言输入数据的方法在C语言中,有几种方法可以输入数据。
以下是一些常见的方法:1.使用scanf函数:这是最常用的方法。
scanf函数用于从标准输入(通常是键盘)读取数据。
c复制代码#include<stdio.h>int main() {int num;printf("请输入一个整数: ");scanf("%d", &num); // %d 是用于读取整数的格式说明符printf("您输入的整数是: %d\n", num);return0;}2.使用getchar函数:这个函数用于读取一个字符。
c复制代码#include<stdio.h>int main() {char ch;printf("请输入一个字符: ");ch = getchar(); // 读取一个字符printf("您输入的字符是: %c\n", ch);return0;}3.使用gets函数:这个函数用于读取一行字符串,直到遇到换行符。
但是,这个函数不检查输入长度,因此容易造成缓冲区溢出。
一般建议使用更安全的fgets函数。
c复制代码#include<stdio.h>int main() {char str[100];printf("请输入一个字符串: ");gets(str); // 读取一行字符串,直到遇到换行符printf("您输入的字符串是: %s\n", str);return0;}4.使用fgets函数:这个函数也用于读取一行字符串,但是可以指定最大长度,因此更安全。
c复制代码#include<stdio.h>int main() {char str[100];printf("请输入一个字符串: ");fgets(str, sizeof(str), stdin); // 从标准输入读取一行字符串,最多读取sizeof(str) - 1个字符,包括一个空字符'\0'。
接收输入的一行字符,统计出字符串中包含数字的个数.
统计字符串中数字个数的方法有很多种,下面我们分别介绍几种常见的方法。
方法一:遍历统计1. 我们可以通过遍历字符串的每一个字符,判断字符是否是数字,并统计数字的个数。
实现代码如下:```pythondef count_digits(s):count = 0for char in s:if char.isdigit():count += 1return countinput_str = input("请输入字符串:")result = count_digits(input_str)print("字符串中包含数字的个数为:", result)```方法二:使用正则表达式2. 正则表达式是一种可以用来匹配字符串的强大工具,我们可以利用正则表达式来匹配数字,并统计匹配到的数字个数。
实现代码如下:```pythonimport redef count_digits(s):pattern = repile(r'\d')result = pattern.findall(s)return len(result)input_str = input("请输入字符串:")result = count_digits(input_str)print("字符串中包含数字的个数为:", result)```方法三:使用内置函数3. Python内置的字符串方法也提供了一些方便的函数来处理字符串。
我们可以使用`isdigit()`函数来判断字符是否是数字,然后统计数字的个数。
实现代码如下:```pythondef count_digits(s):count = sum(1 for char in s if char.isdigit())return countinput_str = input("请输入字符串:")result = count_digits(input_str)print("字符串中包含数字的个数为:", result)```以上就是三种统计字符串中数字个数的方法,你可以根据实际情况选择适合自己的方法来使用。
(完整版)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语言在计算机编程中,空格是一种特殊的字符,用来表示空白的区域。
我们通常使用空格来分隔不同的单词、操作符或语句,使得代码更加易读、易懂。
本文将介绍如何使用C语言来统计字符串中空格的个数,并且提供一些实用的技巧供大家参考。
在C语言中,我们可以使用循环结构来遍历字符串中的每一个字符,并通过判断是否为空格字符来计数。
首先,我们需要定义一个整型变量来存储空格的个数,例如:```cint spaceCount = 0;```接下来,我们需要使用循环来遍历字符串中的每一个字符,直到遍历到字符串的结束符号`\0`为止。
在循环中,我们可以使用条件判断语句来判断当前字符是否为空格字符,如果是则将空格计数变量加一。
例如:```cfor (int i = 0; str[i] != '\0'; i++) {if (str[i] == ' ') {spaceCount++;}}```上述代码中,`str`代表输入的字符串,`str[i]`代表字符串中的第`i`个字符。
循环的初始值是0,每次循环后`i`的值会增加1。
当循环遍历到字符串的结束符号`\0`时,循环将停止执行。
通过上述代码,我们可以得到字符串中空格的个数。
之后,可以根据具体需求对空格的个数进行进一步操作,例如输出到屏幕上或者用于其他计算等。
在实际编程中,我们还可以引入一些优化技巧来提高代码的效率。
例如,可以利用指针来遍历字符串,而不是使用下标操作符。
这样可以减少索引的访问,从而提高代码的执行速度。
同时,我们还可以使用位运算来进行计数,从而进一步提高效率。
总结而言,统计空格的个数是C语言编程中的一个基本操作,也是我们在处理字符串时经常需要用到的技巧。
通过合理运用循环结构和条件判断语句,我们可以编写出简洁高效的代码来实现这一功能。
同时,通过引入一些优化技巧可以进一步提高代码的性能。
希望本文对大家在C语言编程中的空格统计问题有所帮助。
从键盘输入一串字符,分别统计其中的字母,数字字符和其他
汇编编程:从键盘输入一串字符,分别统计其中的字母(不区分大小写)、数字字符和其他键盘输入一串字符,统计出其中的数字字符个数,字母字符(不区分大小写)个数,其他字符个数,并显示出这三类统计结果(输入字符串以回车结束),可连续对多个字符串统计,用户输入N时退出程序。
要求:题目分析(如何实现,以及实现的关键技术或步骤)2.要有流程图3.写出程序代码4.写出上机操作步骤,给出输入的数据及程序运行结果。
; 题目名称:分类统计字符; 题目来源:/question/131013276.html; 本程序在MASMPlus 1.2集成环境下通过编译,经过调试,运行正确。
Code SegmentAssume CS:Code,DS:Code; -------------------------------------; 功能:显示指定地址(Str_Addr)的字符串; 入口:; Str_Addr=字符串地址(要求在数据段); 用法: Output Str_Addr; 用法举例:Output PromptStrOutput MACRO Str_Addrlea dx,Str_Addrmov ah,9int 21hEndM; -------------------------------------; 功能:在当前光标位置显示一个字符; 入口:dl=要显示的字符Output_Chr proc Nearpush axmov ah,02hint 21hpop axretOutput_Chr Endp; -------------------------------------; 功能:显示、输出一个回车、换行Output_CTLF proc Nearpush axpush dxmov ah,02hmov dl,0dhint 21hmov dl,0ahint 21hpop dxpop axretOutput_CTLF Endp; -------------------------------------; 功能:把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示; 入口:AX=二进制数; 出口:在当前光标位置显示转换后的ASCII码数字Unsi_Dec_ASCII Proc Nearpush dxpush bxpush dimov bx,10lea di,@@Temp_Save[5]mov BYTE PTR [di],'$'dec dicld@@Divide: xor dx,dxdiv bxor dl,30hmov [di],dldec ditest ax,axjnz @@Divideinc dipush dipop dxmov ah,9int 21hpop dipop bxpop dxret@@Temp_Save db 6 dup(?)Unsi_Dec_ASCII EndP; -------------------------------------; 功能:键盘输入一个字符,若输入的是'y'或'n'(不分大小写),则显示并返回; 入口:无; 出口:若输入的是'y',进位标志置位;若输入的是'n',进位标志复位。
(完整版)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++实现⽂件内字符数、单词数、⾏数的统计先给出以及1. 项⽬简介这个项⽬的需求可以概括为:对程序设计语⾔源⽂件统计字符数、单词数、⾏数,统计结果以指定格式输出到默认⽂件中,以及其他扩展功能,并能够快速地处理多个⽂件。
我个⼈对C++⽐较熟悉,各种⽂件输⼊输出流也会⽤,所以选择使⽤C++完成。
当然C++也有它的缺陷,⽐如所有的字符串都要规定⼀个最⼤长度(可以选择⽤string,但我对于string的拼接,以及逐字符操作不是很熟悉,只好含泪⽤char[])。
这个项⽬其实也算是个⼩项⽬,⼀开始我觉得450分钟内肯定完成,就是⼀整天的事情。
结果最后我实际上⽤了两天。
两个原因吧,⼀个是我低估了这个项⽬的代码量。
把这个项⽬的功能从基本功能到扩展功能实现了⼀遍,居然写了我五百多⾏代码(主要是有限状态机模型不会⽤,就⾃⼰按照逻辑硬刚下来了,功能倒是实现了)。
第⼆个是连续⼯作实在太累了,到最后专注度直线下降,基本上有效编码时间只有百分之五⼗了。
不过最后还是刚下来了,⼀定要找时间犒劳⼀下⾃⼰,吃顿好的。
项⽬的开发过程严格遵照软件⼯程的要求,从需求分析,到最后的测试,⼀个不落。
这种开发⽅式,起步的速度会慢⼀些,不过写出来的代码⾮常好看,也易于修改。
下⾯附上⼀张表格。
PSP2.1PSP阶段预估耗时(分钟)实际耗时(分钟)PSP2.1PSP阶段预估耗时(分钟)实际耗时(分钟)Planning计划102Development开发340597· Estimate · 估计这个任务需要多少时间102· Analysis· 需求分析 (包括学习新技术)3032· DesignSpec· ⽣成设计⽂档6060Reporting报告100**95 **· DesignReview· 设计复审 (和同事审核设计⽂档)2030· Test Report· 测试报告6060· CodingStandard· 代码规范 (为⽬前的开发制定合适的规范)205· Size Measurement· 计算⼯作量105· Design· 具体设计6045· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划3030· Coding· 具体编码60335· CodeReview· 代码复审3015· Test· 测试(⾃我测试,修改代码,提交修改)6075合计4506942. ⼤体思路这个项⽬的⼤体思路还是很明确的,我也在github上传了。
c语言cin的用法
c语言cin的用法在C语言中,cin是一个用于从标准输入读取数据的输入流对象。
它是C++语言中的输入流对象,用于接收用户输入的数据,并将其存储到指定的变量中。
在C语言中,我们通常使用scanf函数来实现类似的功能,但在C++中,cin提供了更为方便和安全的输入方式。
cin的基本用法cin是C++中的标准输入流对象,它可以接收各种类型的数据,包括整数、浮点数、字符、字符串等。
下面是cin的基本用法:#include <iostream>using namespace std;int main() {int num;cout << "请输入一个整数:";cin >> num;cout << "您输入的整数是:" << num << endl;return 0;}在上面的例子中,我们首先声明了一个整数变量num,然后使用cout输出流向用户提示输入一个整数。
接下来,使用cin输入流接收用户输入的整数,并将其存储到num变量中。
最后,使用cout输出流显示用户输入的整数。
cin的输入操作符在C++中,cin使用输入操作符>>来接收用户输入的数据。
输入操作符>>可以用于各种类型的数据,包括整数、浮点数、字符、字符串等。
下面是一些常见的输入操作符的使用示例:输入整数int num;cin >> num; // 从标准输入读取一个整数,并存储到num变量中输入浮点数float num;cin >> num; // 从标准输入读取一个浮点数,并存储到num变量中输入字符char ch;cin >> ch; // 从标准输入读取一个字符,并存储到ch变量中输入字符串char str[100];cin >> str; // 从标准输入读取一个字符串,并存储到str数组中需要注意的是,使用cin输入字符串时,它会自动在遇到空格或换行符时停止读取,因此只能读取一个单词。
5文本单词统计
实验五文本单词统计
一、目的和要求
1. 掌握字符串的基本概念与操作。
2. 掌握C语言的字符串库函数和文件操作函数。
二、实验内容
设计程序,统计并输出一篇英文文章(文本文件)中的各个单词出现的次数。
三、算法:
提示:
1) 循环每次从文件中读出一个字符,判断是否属于字母,如果属于字母则构造单词,否则拆分单词,然后进行单词统计。
2) 统计时需要构造一个“单词本”,其中每条数据包括该单词和其出现次数。
每次从文件中读出一个单词后,查找其是否在单词本中出现过。
如果出现过,对应单词的次数加1,否则向单词本添加该单词,初始化其次数为1。
可能用到的文件和字符串操作:
1)以只读方式打开D盘下的abc.txt文件,将文件指针保存在变量f中。
FILE* f = fopen("d:\\abc.txt", "r");
2)从f中读取一个字符,读取后f会自动移动到文件的下一个字符。
char c = fgetc(f);
3)判断文件是否读完。
c为从文件中读取的字符,EOF表示文件结束符,每个文件都有一个结束符,文件指针移动到最后时会读出。
c == EOF
4)关闭文件。
有始有终。
fclose(f);
5)判断两字符串是否相等。
strcmp结果等于0表示相等
strcmp(a, b) == 0
实验截图:。
c语言mywc的用法 -回复
c语言mywc的用法-回复C语言中的mywc是一个非常常见的命令,用于统计文本文件的单词数、字符数和行数。
在本篇文章中,我将逐步介绍mywc的用法和实现。
首先,让我们了解一些基本概念。
什么是mywc?mywc是一个文本计数命令,是C语言中的一个程序。
它可以对给定的文本文件进行统计,并输出该文件中的单词数、字符数和行数。
这个命令通常用于统计文本文件的大小、长度和内容。
mywc的用法为了正确使用mywc命令,您应该遵循以下格式:mywc [选项] 文件名选项:- `-w`:输出文件中的单词数。
- `-c`:输出文件中的字符数。
- `-l`:输出文件中的行数。
文件名:要统计的文本文件的名称。
接下来,我们将从头开始实现一个简单的mywc程序,并逐步添加选项。
第一步:打开文件在获取到用户输入的文件名后,我们需要打开该文件,以便在后续步骤中读取其内容。
我们可以使用C语言中的`fopen()`函数来打开文件。
c#include <stdio.h>int main(int argc, char *argv[]) {FILE *file;char *filename = argv[1];file = fopen(filename, "r");if (file == NULL) {printf("无法打开文件: s\n", filename);return 1;}在这里添加代码fclose(file); 关闭文件return 0;}在代码中,我们首先声明一个`FILE`类型的指针`file`,用于表示文件。
然后,我们使用`fopen()`函数打开用户提供的文件名,并将其赋值给`file`指针。
如果文件无法打开,我们将打印一条错误消息并返回1,表示程序出错。
最后,我们使用`fclose()`函数关闭文件。
第二步:统计行数在打开文件后,我们可以开始计算行数了。
为了实现这一点,我们需要定义一个变量用于计数,并在每次读取到换行符时递增。
统计单词个数及词频(C++实现)
统计单词个数及词频(C++实现)#include<iostream>#include<fstream>#include<string>using namespace std;struct Word //定义结构体{string word;size_t length;Word* next;int repnum;//repeat number 重复次数bool ifdel;//if delete 是否被删除Word(string _word, size_t _lendth = 0, Word* _next = NULL, int _repnum = 1, bool _ifdel = false) :word(_word), length(_lendth), next(_next), repnum(_repnum), ifdel(_ifdel){}};Word *head = NULL, *tail = NULL;int size = 0; //链表长度,即单词总个数int delsum = 0;//delete sum 被删除的总个数void Push(const string& str, const size_t& len) //形成链表{if (NULL == head){head = tail = new Word(str, len, NULL, 1, false);}else{tail->next = new Word(str, len, NULL, 1, false);tail = tail->next;}size++;}void Destory() //delete new{Word* ptr = head;while (ptr){Word* pt = ptr;ptr = ptr->next;delete pt;}head = tail = NULL;size = 0;}void Readin(string& mystr) //read in 读⼊{string temps;for (size_t i = 0; i < mystr.length(); i++){if (mystr[i] >= 'a'&&mystr[i] <= 'z' || mystr[i] >= 'A'&&mystr[i] <= 'Z'){temps += mystr[i];}else{if (!temps.empty())//不空的时候返回0{Push(temps, temps.length());temps.erase(temps.begin(), temps.end());}}}}void DeSame() //delete the same 删除相同的单词(不是真删,只是做标记){Word* p = head;while (p&&p->next){while (p->ifdel&&p->next){p = p->next;}Word* pt = p->next;while (pt){if (!pt->ifdel&&pt->word == p->word){p->repnum++;pt->ifdel = true;delsum++;}pt = pt->next;}p = p->next;}}void Inputp(Word* warr[]) //input point 将未被“删除”的结点的指针传⼊数组{int i = 0;Word* pt = head;while (pt){if (!pt->ifdel){warr[i] = pt;i++;}pt = pt->next;}}void Sort(Word** warr, int start, int end) //将指针按其指向的结点的repnum从⼤到⼩排序,快排实现{int i = 0, j = 0;Word* key = NULL;key = warr[start];i = start;j = end;while (i<j){while (warr[j]->repnum <= key->repnum&&i<j)j--;warr[i] = warr[j];while (warr[i]->repnum >= key->repnum&&i<j)i++;warr[j] = warr[i];}warr[i] = key;if (i - 1>start)Sort(warr, start, i - 1);if (end > i + 1)Sort(warr, i + 1, end);}void Show(Word** warr, int len){for (int i = 0; i < len; i++){cout << warr[i]->word << "" << warr[i]->repnum << endl;}}int main(){ifstream readfile("zpc.txt", ios::in);if (!readfile){ cout << "程序出现异常,⾃动退出!" << endl; return0; }string str, str1;while (!readfile.eof()){getline(readfile, str1);str += str1;str += '';}readfile.close();Readin(str);DeSame();cout << "单词总个数(不考虑重复):" << size << endl;cout << "除去重复后的单词个数(即重复的单词按1个计):" << size - delsum << endl;Word** wdarr = new Word*[size - delsum];Inputp(wdarr);Sort(wdarr, 0, size - delsum - 1);Show(wdarr, size - delsum);delete[]wdarr;Destory();return0;}。
统计键盘输入字符、数字个数”
“统计键盘输入字符、数字个数”实验报告一、实验目的1、学习循环程序结构,掌握编写循环处理程序的方法和技巧。
2、通过循环结构程序熟悉汇编语言程序设计的主要方法。
3、了解和掌握程序设计过程中算法的选择。
4、掌握汇编语言的调试方法。
二、实验内容从键盘输入一系列字符(每种字符不超过9)并以回车符结束,请统计出字母、数字及其它字符的个数,最后在屏幕上显示计数结果。
三、实验过程1、编写程序,后附程序代码2、测试程序输入四组不同的测试字符串,得到NUMBER值为数字个数,CHAR值为字母个数,REST为符号个数。
三、结果分析和思考结果分析:由测试中可以看出,三种字符显示的个数范围是0~9,大于9之后的就会显示个数的数值加30H之后的数值对应的ASCII码值,这是因为显示个数的时候,我的思路是将个数分别存储在NUMBER,CHAR,REST中,然后显示它们的值加30H后所对应的ASCII码值,因此如果想要显示两位数、三位数的数值,就要在最后输出的时候改变输出的方法,将两位数、三位数的数值输出。
改进思路:先将前面程序计算出的个数三位数放到AL中,然后调用除法指令DIV除以100得到百位数字,而后除以10得到十位数字,和余下的个位数字。
就可以得到000~999显示范围的字符个数。
在调用除法的过程中,被除数在AX中,商在AL中,余数在AH中以数字个数NUMBER为例:MOV AL,NUMBER 将NUMBER送到ALMOV AH,0 ;对应百位MOV BL 100DIV BLMOV BL,AH ;余数在AHMOV AH,2 ;显示最高位(除以100的余数为最高位,存在AH中)ADD AL,30HMOV DL,ALINT 21HMOV AL,BL ;对应十位MOV AH,0MOV BL,10DIV BLMOV BL,AH ;余数在AHMOV AH,2 ;显示中间位(除以10的余数为中间位,存在AH中)ADD AL,30HMOV DL,ALINT 21HMOV DL,BL;对应个位数字ADD DL,30HMOV AH,2 ;显示个位INT 21H四、代码DSEG SEGMENTNUMBER DB 0 ;存储数字个数CHAR DB 0 ;字母个数REST DB 0 ;字符个数STR1 DB 'NUMBER:','$' ;输出提示”NUMBER:”STR2 DB ' CHAR:','$' ;输出提示”CHAR:”STR3 DB ' REST:','$' ;输出提示”REST:”DSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DSEGMOV DS,AXAGAIN:MOV AH,1INT 21HCMP AL,0DH ;判断字符是否为回车JZ EXIT ;是回车,跳转到结束语句CMP AL,'0' ;不是回车,判断是否大于’0’JNL NEXT1 ;大于‘0’,跳转到NEXT1INC REST ; 小于’0’,是字符,REST自增1JMP AGAIN ;AGAIN循环NEXT1:CMP AL,'9' ;判断是否小于’9’JBE N1 ;小于9,是数字,跳转到N1CMP AL,65;大于9,不是数字,跟’a’比较JNL NEXT2 ;大于’a’,跳转到NEXT2INC REST ;小于’a’,是字符,REST自增1JMP AGAIN;返回循环NEXT2:CMP AL,90 ;跟’z’作比较JBE N2 ;小于’z’,是字母,跳转到N2CMP AL,97 ;大于’z’,跟‘A’比较JNL NEXT3 ;大于’A’跳转到NEST3INC REST ;大于’z’,小于‘A’,是字符,REST自增1 JMP AGAIN ;返回循环NEXT3:CMP AL,122 ;跟’Z’比较JBE N2 ;小于’Z’,是大写字母,跳转到N2INC REST ;不是字母,是字符,REST自增1JMP AGAIN ;返回循环N1:INC NUMBER ;判断为数字,NUMBER自增1JMP AGAIN ;返回循环N2:INC CHAR ;判断为字母,CHAR自增1JMP AGAIN ;返回循环EXIT:LEA DX,STR1MOV AH,09HINT 21H ;显示提示“NUMBER:”MOV DL,NUMBER ;NUMBER送到DLADD DL,30HMOV AH,2INT 21H ;显示NUMBER的值LEA DX,STR2MOV AH,09HINT 21H ;显示提示“CHAR:”MOV DL,CHAR ;CHAR送到DLADD DL,30HMOV AH,2INT 21H ;显示CHAR的值LEA DX,STR3MOV AH,09HINT 21H ;显示提示”REST:”MOV DL,REST ;REST送到DLADD DL,30HMOV AH,2INT 21H ;显示REST的值MOV AH,4CHINT 21H ;程序结束CSEG ENDSEND START。
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
输⼊⼀⾏字符,分别统计出其中英⽂字母、空格、数字和其它字符的个数题⽬:输⼊⼀⾏字符,分别统计出其中英⽂字母、空格、数字和其它字符的个数。
程序分析:利⽤while语句,条件为输⼊的字符不为 '\n '.1package com.li.FiftyAlgorthm;23import java.util.Scanner;45/**6 * 题⽬:输⼊⼀⾏字符,分别统计出其中英⽂字母、空格、数字和其它字符的个数。
7 *8 * 程序分析:利⽤while语句,条件为输⼊的字符不为 '\n '9 * @author yejin10*/11public class CharacterStatistics {12static int digital = 0;13static int character = 0;14static int other = 0;15static int blank = 0;1617public static void main(String[] args) {18char[] ch = null;19 Scanner sc = new Scanner(System.in);20 String s = sc.nextLine();21 ch = s.toCharArray();2223for (int i = 0; i < ch.length; i++) {24if (ch[i] >= '0' && ch[i] <= '9') {25 digital++;26 } else if ((ch[i] >= 'a' && ch[i] <= 'z') || ch[i] > 'A'27 && ch[i] <= 'Z') {28 character++;29 } else if (ch[i] == ' ') {30 blank++;31 } else {32 other++;33 }3435 }36 System.out.println("数字个数: " + digital);37 System.out.println("英⽂字母个数: " + character);38 System.out.println("空格个数: " + blank);39 System.out.println("其他字符个数:" + other);40 }41 }。
编写一个程序,接受用户输入的一段英文文字,统计出其中的字符个数、单词个数和句子的个数。(设。。。
编写⼀个程序,接受⽤户输⼊的⼀段英⽂⽂字,统计出其中的字符个数、单词个数和句⼦的个数。
(设。
这个题⽬⽤到正则表达式,正则表达式是⼀种可以⽤于模式匹配和替换的规范.字符串对象(String)调⽤matches()可以判断当前字符串对象是否与参数regex指定的正则表达式匹配.String上可以使⽤正则表达式的操作,实际上是利⽤了java.util.regex.Pattern与java.util.regex.Matcher的功能.当调⽤String的matches()⽅法时,实际上是调⽤了Pattern的静态⽅法matches(),这个⽅法会返回boolean值,表⽰字符串是否符合正则表达式.将正则表达式视为⼀个对象来重复使⽤,使⽤pattern的静态⽅法compile()进⾏编译.这个⽅法会返回⼀个Pattern的实例,这个实例代表正则表达式,之后可以重复使⽤Pattern实例的matcher()⽅法来返回⼀个Matcher的实例,代表符合正则表达式的实例.1import java.util.Scanner;2import java.util.regex.Matcher;3import java.util.regex.Pattern;45public class Test5_1 {6public static void main(String[] args){7int countC=0,countW=0,countS=0; //分别表⽰字符,单词和句⼦的个数8 Scanner in=new Scanner(System.in);9 System.out.print("input a english sentence:");10 String st=in.nextLine(); //⽤nextInt接收,是以回车作为分隔符.⽽⽤next接受,是以空格作为分隔符.11 Pattern p2=pile("[ ,.!?]"); //与[]中的任意⼀个字符匹配即可.分别有空格,逗号,句号,感叹号,问号.⽤以统计单词个数.12 Matcher m2=p2.matcher(st); 13 Pattern p1=pile("[a-zA-Z ,.!?]"); //匹配⼀段话中字符的个数14 Matcher m1=p1.matcher(st);15 Pattern p3=pile("[.!?]"); //匹配⼀段话中句⼦的个数16 Matcher m3=p3.matcher(st);17boolean result2=m2.find(); 18while(result2){19 countW++;20 result2=m2.find(); //判断是否找到并统计个数21 }22boolean result1=m1.find();23while(result1){24 countC++;25 result1=m1.find();26 }27boolean result3=m3.find();28while(result3){29 countS++;30 result3=m3.find();31 }32 System.out.println("单词个数:"+countW);33 System.out.println("字符个数:"+countC);34 System.out.println("句⼦个数:"+countS);35 }36 }。
统计数字字符和空格c语言
统计数字字符和空格c语言统计数字字符和空格是C语言中常见的任务之一。
在C语言中,我们可以使用各种方法来实现这个目标。
本文将介绍一些常用的方法和技巧,帮助读者更好地理解和掌握统计数字字符和空格的技术。
一、统计数字字符在C语言中,数字字符是指'0'到'9'之间的字符。
统计数字字符的方法有很多种,下面介绍几种常用的方法。
1. 逐个字符判断法这种方法是最直观也是最简单的方法之一。
我们可以使用循环遍历字符串的每个字符,然后逐个判断是否为数字字符。
代码示例如下:```c#include <stdio.h>int countDigits(char *str) {int count = 0;for (int i = 0; str[i] != '\0'; i++) {if (str[i] >= '0' && str[i] <= '9') {count++;}}return count;}int main() {char str[] = "Hello123World456";int count = countDigits(str);printf("数字字符个数:%d\n", count);return 0;}```2. 使用isdigit函数判断法C语言提供了一个isdigit函数,可以用来判断一个字符是否为数字字符。
代码示例如下:```c#include <stdio.h>#include <ctype.h>int countDigits(char *str) {int count = 0;for (int i = 0; str[i] != '\0'; i++) {if (isdigit(str[i])) {count++;}}return count;}int main() {char str[] = "Hello123World456";int count = countDigits(str);printf("数字字符个数:%d\n", count);return 0;}```3. 使用正则表达式判断法C语言提供了一个正则表达式库regex.h,可以用来进行复杂的模式匹配。
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位不是字母)就继续往下走。
当然你还要设三个变量存储空格、标点和单词的数量。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用C 语言编写记录录入一段文字中的字符数和单词数 先上程序:
#include <stdio.h>
int main()
{
int letter = 0,word = 0;
char flag = getchar();
while (flag != '#')
{
if (flag != ' ')
letter +=1;
elseif (flag ==' ')
word +=1;
flag = getchar();
}
word+=1;
printf("录入字符数:%d\n 录入字母数:%d",letter,word); return 0;
}
主题思想:
传统的程序初学者会想到将字符存储在一个额定长度的数组中,但是这样不但浪费内存,并且无法存储过多的字符,兼容性极不好。
使用getchar( )来处理这个问题,首先需要明白getchar( )的功能是什么,getchar( )是一种对键盘缓冲区一个一个取字符的函数;(注:这个函数不用自己编写!直接用就可以)。
每取一个非空字符,letter 变量就增1;如果取到的是空字符,那么跳过letter 增1的程序段,进入下一条判断,即:elseif (flag ==' '),完成word 增1。
以此循环往复,最后遇‘#’结束程序。
最后因为最后一个单词后没有空格,所以要将word 增1。
缺点:如果两个单词之间录入多个空格,计数量就会发生错误。
效果图。