面试官您好 英文请问c++中如何实现输入一串英文 统计各单词中出现的个数

c++编程 输入一行字符,统计其中的单词个数,单词之间用空格隔开_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
c++编程 输入一行字符,统计其中的单词个数,单词之间用空格隔开
我有更好的答案
static int n=0;& for(int i=0;i&& ' } cout&&a&&b;i++) {
if(a[i]=='
return 0;)
n++;\n字符串中共有单词:&&&n+1&lt#include&iostream&#include&string&int main(){
string a=&such a good boy hello&; int b=sizeof(a)
采纳率:42%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包sponsored links
统计英文文章中各单词的频率,打印频率最高的十个单词(C语言实现)
&一、程序思路及相关代码
& & & 首先打开文件,代码如下
char fname[10];
printf("请输入要分析的文件名:\n");
scanf("%s",fname);
if((fp=fopen(fname,"r"))==NULL){
//读取文件内容,并返回文件指针,该指针指向文件的第一个字符
fprintf(stderr,"error opening.\n");
  对于文件的扫描,以字符为单位
ch=fgetc(fp);
if(ch==' 'ch==','ch=='.'ch==';')
//如果是空格,自动跳到下个字符
scanner(fp);
fseek(fp,-1,1);
//如果不是空格,则回退一个字符并扫描
scanner(fp);
}while (ch!=EOF);
  要统计单词频率,首先要将文章分为单个单词
int zimu(char ch){
if((ch &= 'A' && ch &= 'Z')
(ch &= 'a' && ch &= 'z'))
void scanner(FILE *fp)
char b[20];
ch=fgetc(fp);
if(zimu(ch))
//判断该字符是否是字母
ch=fgetc(fp);
//调用函数扫描字符
while(zimu(ch))
ch = fgetc(fp);
fseek(fp,-1,1);
b[i] = '\0';
strcpy(w[k].c,b);
 对于单词,为单词创建结构体
struct word
char c[20];//单词词组
int//单词个数
& &统计各个单词的个数
for(i=1;i&k+1;i++)
for(i=1;i&k+1;i++)
for(j=i+1;j&k+1;j++)
if(strcmp(w[i].c,w[j].c)==0)
if(w[i].n==0)//将已统计的单词跳过
& &将单词按个数多少进行排序
for(i=1;i&k+1;i++)
for(j=1;j&k+1-i;j++)
if(w[i].n&w[j].n)//交换结构体内数据
strcpy(a,w[i].c);
w[i].n=w[j].n;
strcpy(w[i].c,w[j].c);
strcpy(w[j].c,a);
printf("英文文章中频率最高10个单词及个数为:\n");
for(i=1;i&11;i++)
printf("%d:
%d\n",i,w[i].c,w[i].n);
二、遇到问题
(1)对于单词的扫描,后来查看编译中的词法分析解决了
(2)对于词组的,使用strcpy(w[k].c,b);解决将词组c到结构体数组中
(3)对于单词个数统计,
if(w[i].n==0)//将已统计的单词跳过
将与后面单词相同的跳过,避免出现重复
三、程序过程统计
& & &二月26号下午,2个小时思考程序思路,并书写大体框架
& & 二月27号上机时间,将扫描和单词分解完成
& & 二月27号完成程序
四、程序运行截图
#include &iostream& #include &vector& #include &map& #include &string& #include &cctype& #include &fstream& #include &iomanip& #include &l ...
下面的例子展示了如何在C++11中,利用regex_search()统计一篇英文文章中的单词数: #include &iostream& #include &regex& #include &string& #include &fstream& // 统计单词数 int ...
写英语作文的时候,常常要求满足一定的字数,在以往,要么,我们一个一个地数,要么,我们估算一行的单词数,然后用行数进行估算.第一种方法太费时,如果要是写个长篇大论,那几乎是mission imposible,而第二种方法有不太准确.这就给我们留下了一个问题:如何又快又准确地统计一篇英文文章中的单词数?
程序,就是用来帮助人们完成这些看起来枯燥繁琐但是带有一 ...
下面这个函数是js查找一篇英文文章中出现频率最高的单词(由26个英文字母大小写构成),输出该单词及出现次数,不区分大小写,主要是正则的运用: function counts(article){ article = article.trim().toUpperCase(); var array = article.match(/[A-z]+/g); artic ...
22号我们拿到了题目,24号注册了博客,在25日晚上开始着手分析题目——“分析一个文本文件(英文)中各个词出现的频率,并把频率最高的十个词打印出来”. 于是想到 1.要读入一篇文本文档 2.分析文本内容 把每个单词判断出来 3.计算每个单词出现的次数 4.根据每个单词出现的次数排序,输出频率最高的十个单词.
首先定义一个结构体存储单词及单词个数:23:16 提问
任意两篇英文文章,统计其相同单词数所占的百分比
文章1和2的文件名由用户输入。将两篇文章的相同单词,相同单词数量,相同单词在两篇文章的出现次数,相同单词分别在各自文章所占百分比,输出到屏幕,同时保存在一个单独的文件中
按赞数排序
首先强调下,你的算法有问题,单词相同占比不能说明文章雷同。
非要按照你做,你可以扫描两篇文章,构造字典树。然后可以得到一个全文单词和出现词频的排序,两者比较下就可以了。
C#构造字典树的代码我分享过。
那个网站不行啊!显示出有爬虫
网页打不开啊!啊啊啊啊啊啊啊
雷同检测软件你试试!
可以参考编程珠玑第二版第二章的内容
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!
其他相关推荐问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
int main(){
char s[100]={0};
char *p=s;
int num=0,flag=0,wnum=0,line=0;
while ((gets(s))!=EOF) {
if ((*p&='a'||*p&='z')||(*p&='Z'||*p&='A')) {
if (flag==0) {
if (flag==1){
if (*p=='\n'||*p=='\0') {
int ave=wnum/
printf("Number of lines: %d\nNumber of words: %d\nAverage length of a word: %d",line,num,ave);
输入多行之后,command+z还是结束不了输入请问问题在哪里?有什么更好的接受多行文字的方法吗?这是原题,希望不是我错误理解题意了……谢谢...
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
你的主要问题是eof输入错误了。win下是ctrl z但是mac下不是,而是ctrl d 注意不是common
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
楼主试试在printf之前输出num,很大概率是等于0的。最严重的问题:
、*(如果以下看不懂请移动至最下面,对gets()函数的分析)*、
1、gets(s)每次返回一行而不是一次性返回EOF之前的全部字符!楼主可能是这一点想错了,如果不是请看下面的分析。2、为什么num=0? gets(s)每次读一行,s是字符串,楼主每次只判断了一个字符*p,就继续下一次循环了,输入的样例很可能会导致num=0的就是num++那句不会执行。应该再加一重循环while(*p!='\0')判断s里的每个字符。3、每次判断一行数字,p就应该从s的开头开始,所以 char *p=s应该放在while(get(s))这个循环里面。
其他的方法我推荐用while((ch=getchar())!=EOF),这个你的思路挺符合的,一个字符一个字符判断,你可以去搜这句,挺经典的。
int getchar ( void)返回值为用户输入的ASCII码,读到文件末尾返回EOF,EOF的值是-1
从方法上说,可以用空格或换行判断单词数,'\n'判断行数。按照题目来说应该是没有句号或逗号的。比如
while((ch=getchar())!=EOF){
if(ch=='\n') {
lineNum++;
wordNum++;
else if(ch==' ') {
wordNum++;
printf("%d %d",lineNum,wordNum);
while(1); // 按Ctrz+z后卡死在这里可以看输出的结果
我测试了下,目测正确。
抱歉,之前没仔细看代码,就看了一行while(gets(s)!=EOF) 。就直接写答案了,刚刚想起其实好像也没什么问题,所以去看了你的代码。
之前的回答:
楼主用的是C编译器的吧,我用C++编译器编译不过的。ERROR:ISO C++ forbids comparison between pointer and integer 。
gets() 错了,gets()返回的是指针,EOF是int整数,应该用while(gets(s)!=NULL) 。
函数原型是char * gets (char * buffer ); 读取成功返回和buffer相同的指针,遇到错误或EOF返回NULL。执行时,不断从stdin读取字符,遇到换行符或EOF时停止,并将读取的结果存放在buffer中。注意换行符会被转换为‘\0’(空字符),加在buffer的后面。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
这个问题,c语言之父写的那本书有解答。
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:用c++编程:统计一个英文文本文件中一个特定单词出现的次数,并将结果存入指定文件中!_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
用c++编程:统计一个英文文本文件中一个特定单词出现的次数,并将结果存入指定文件中!
我有更好的答案
/&#47.open(&指定文件;
int n=0;int main(){
string getWord.txt&);
while(infile&&getWord)
if(getWord==testWord) ++n;&;
cin&&quot.txt&);
outfile&lt, testW计数
cout&testW
ifstream infile(&英文文本#include &&输入要查找的特定单词\n&#include &fstream&iostream&gt
采纳率:56%
为您推荐:
其他类似问题
文本文件的相关知识
换一换
回答问题,赢新手礼包

我要回帖

更多关于 英文信件 您好 的文章

 

随机推荐