如何用c语言从键盘上读取一段英语短文,并统计出各个单词的出现个数
2018-03-31 15:18
615 查看
首先将这个问题分解成几个问题:
1.从键盘上读取文章。
2.将文章中的单词提取
3.去除重复的单词
4.统计单词的个数
一:从键盘上读取文章
1)可以有俩个方法。1.定义一个一维字符数组进行读取以及存储。2.定义一个二维字符数组读取以及存储。
本文中主要对第二个方法进行介绍
char m[10][30]={'\0'}; //定义一个二维的字符数组,并对其进行初始化,初始化为结束符,用来存储文章
char word[100][30]={'\0'}; //用来存储单词
for(i=0;i<10;i++)
{
gets(m[i]);
flag++;
if(strcmp(&m[i][0],"\0")==0)
{
break;
}
} //get(m[i]) 一行一行的输入 如果不进行输入则直接跳出
二:提取文章的的单词
我是将字母全部转换成大写,然后判断是否为字母,是字母将其对应在另一个数组的数字为1,不是则为0
for(i=0;i<10;i++)
{
for(j=0;j<30;j++)
{
if(m[i][j]>=97&&m[i][j]<=122) //小写转换成大写
{
m[i][j]=m[i][j]-('a'-'A');
}
if(m[i][j]>=65&&m[i][j]<=90)
{
mark[l]=1;
}
else
{
mark[l]=0;
}
l++;
}
}
这段代码的作用就是实现我前面所说的。接下来就是根据1与0的关系将单词分解出来
for(p=0;p<300;p++)
{
if(mark[p]==1&&mark[p+1]==1)
{
word[r][s]=m[i][j];
s++;
}
if(mark[p]==1&&mark[p+1]==0)
{
word[r][s]=m[i][j];
r++;
s=0;
sum++;
}
j++;
if(j==30)
{
j=0;
i++;
}
}
分解后再将重复的单词删除
for(i=0;i<sum;i++)
{
strcpy(word2[i],word[i]);
}
sum1=sum;
for(i=0;i<sum1;i++)
{
for(j=i+1;j<sum1;j++)
{
flag2=0;
for(t=0;t<30;t++)
{
flag=1;
if(word[i][t]==word[j][t])
{
flag=0;
}
flag2+=flag;
}
if(flag2==0)
{
for(r=j;r<sum1;r++)
{
strcpy(word[r],word[r+1]);
}
sum1--;
j=i;
}
}
最后统计单词个数
r=0;
flag2=0;
flag=1;
int flag3=0;
while(r<sum1)
{
flag3=0;
for(i=0;i<sum;i++)
{
if(strcmp(word[r],word2[i])==0)
{
flag3++;
}
}
time[r]+=flag3;
r++;
}
所有代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
char m[10][30]={'\0'};
char word[100][30]={'\0'};
int mark[300]; //能够存储10行300字母100个单词
char word2[100][30]={'\0'};//没有相同的单词
int i,j,l=0;
int p,q,r,s,t;
int flag=1;
int flag2=0;
int time[100];
for(i=0;i<100;i++)
{
time[i]=0;
}
int sum=0;
int
4000
sum1=0;
for(i=0;i<10;i++)
{
gets(m[i]);
flag++;
if(strcmp(&m[i][0],"\0")==0)
{
break;
}
}
//------------------------------------------------------------------------------------//
for(i=0;i<10;i++)
{
for(j=0;j<30;j++)
{
if(m[i][j]>=97&&m[i][j]<=122) //小写转换成大写
{
m[i][j]=m[i][j]-('a'-'A');
}
if(m[i][j]>=65&&m[i][j]<=90)
{
mark[l]=1;
}
else
{
mark[l]=0;
}
l++;
}
}
//-------------------------------------------------------------------------//
i=0;
j=0;
r=0;
s=0;
for(p=0;p<300;p++)
{
if(mark[p]==1&&mark[p+1]==1)
{
word[r][s]=m[i][j];
s++;
}
if(mark[p]==1&&mark[p+1]==0)
{
word[r][s]=m[i][j];
r++;
s=0;
sum++;
}
j++;
if(j==30)
{
j=0;
i++;
}
} //`将单词提取出来,提取到word数组中
//--------------------------------------------------------------//
for(i=0;i<sum;i++)
{
strcpy(word2[i],word[i]);
}
sum1=sum;
for(i=0;i<sum1;i++)
{
for(j=i+1;j<sum1;j++)
{
flag2=0;
for(t=0;t<30;t++)
{
flag=1;
if(word[i][t]==word[j][t])
{
flag=0;
}
flag2+=flag;
}
if(flag2==0)
{
for(r=j;r<sum1;r++)
{
strcpy(word[r],word[r+1]);
}
sum1--;
j=i;
}
}
} //删除重复
//------------------------------------------------------------------------//
r=0;
flag2=0;
flag=1;
int flag3=0;
while(r<sum1)
{
flag3=0;
for(i=0;i<sum;i++)
{
if(strcmp(word[r],word2[i])==0)
{
flag3++;
}
}
time[r]+=flag3;
r++;
} //统计每个单词出现的次数
//-------------------------------------------------//
printf("\n总数:");
printf("%d\n",sum);
for(i=0;i<sum1;i++)
{
puts(word2[i]);
printf("-----次数:");
printf("%d",time[i]);
printf("\n");
}
}
在devcpp环境中运行无误 还可以对单词按照字母顺序进行排序 也可以对文章的容量进行修改,推荐使用函数来实现它 我懒0.0就这样
1.从键盘上读取文章。
2.将文章中的单词提取
3.去除重复的单词
4.统计单词的个数
一:从键盘上读取文章
1)可以有俩个方法。1.定义一个一维字符数组进行读取以及存储。2.定义一个二维字符数组读取以及存储。
本文中主要对第二个方法进行介绍
char m[10][30]={'\0'}; //定义一个二维的字符数组,并对其进行初始化,初始化为结束符,用来存储文章
char word[100][30]={'\0'}; //用来存储单词
for(i=0;i<10;i++)
{
gets(m[i]);
flag++;
if(strcmp(&m[i][0],"\0")==0)
{
break;
}
} //get(m[i]) 一行一行的输入 如果不进行输入则直接跳出
二:提取文章的的单词
我是将字母全部转换成大写,然后判断是否为字母,是字母将其对应在另一个数组的数字为1,不是则为0
for(i=0;i<10;i++)
{
for(j=0;j<30;j++)
{
if(m[i][j]>=97&&m[i][j]<=122) //小写转换成大写
{
m[i][j]=m[i][j]-('a'-'A');
}
if(m[i][j]>=65&&m[i][j]<=90)
{
mark[l]=1;
}
else
{
mark[l]=0;
}
l++;
}
}
这段代码的作用就是实现我前面所说的。接下来就是根据1与0的关系将单词分解出来
for(p=0;p<300;p++)
{
if(mark[p]==1&&mark[p+1]==1)
{
word[r][s]=m[i][j];
s++;
}
if(mark[p]==1&&mark[p+1]==0)
{
word[r][s]=m[i][j];
r++;
s=0;
sum++;
}
j++;
if(j==30)
{
j=0;
i++;
}
}
分解后再将重复的单词删除
for(i=0;i<sum;i++)
{
strcpy(word2[i],word[i]);
}
sum1=sum;
for(i=0;i<sum1;i++)
{
for(j=i+1;j<sum1;j++)
{
flag2=0;
for(t=0;t<30;t++)
{
flag=1;
if(word[i][t]==word[j][t])
{
flag=0;
}
flag2+=flag;
}
if(flag2==0)
{
for(r=j;r<sum1;r++)
{
strcpy(word[r],word[r+1]);
}
sum1--;
j=i;
}
}
最后统计单词个数
r=0;
flag2=0;
flag=1;
int flag3=0;
while(r<sum1)
{
flag3=0;
for(i=0;i<sum;i++)
{
if(strcmp(word[r],word2[i])==0)
{
flag3++;
}
}
time[r]+=flag3;
r++;
}
所有代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
char m[10][30]={'\0'};
char word[100][30]={'\0'};
int mark[300]; //能够存储10行300字母100个单词
char word2[100][30]={'\0'};//没有相同的单词
int i,j,l=0;
int p,q,r,s,t;
int flag=1;
int flag2=0;
int time[100];
for(i=0;i<100;i++)
{
time[i]=0;
}
int sum=0;
int
4000
sum1=0;
for(i=0;i<10;i++)
{
gets(m[i]);
flag++;
if(strcmp(&m[i][0],"\0")==0)
{
break;
}
}
//------------------------------------------------------------------------------------//
for(i=0;i<10;i++)
{
for(j=0;j<30;j++)
{
if(m[i][j]>=97&&m[i][j]<=122) //小写转换成大写
{
m[i][j]=m[i][j]-('a'-'A');
}
if(m[i][j]>=65&&m[i][j]<=90)
{
mark[l]=1;
}
else
{
mark[l]=0;
}
l++;
}
}
//-------------------------------------------------------------------------//
i=0;
j=0;
r=0;
s=0;
for(p=0;p<300;p++)
{
if(mark[p]==1&&mark[p+1]==1)
{
word[r][s]=m[i][j];
s++;
}
if(mark[p]==1&&mark[p+1]==0)
{
word[r][s]=m[i][j];
r++;
s=0;
sum++;
}
j++;
if(j==30)
{
j=0;
i++;
}
} //`将单词提取出来,提取到word数组中
//--------------------------------------------------------------//
for(i=0;i<sum;i++)
{
strcpy(word2[i],word[i]);
}
sum1=sum;
for(i=0;i<sum1;i++)
{
for(j=i+1;j<sum1;j++)
{
flag2=0;
for(t=0;t<30;t++)
{
flag=1;
if(word[i][t]==word[j][t])
{
flag=0;
}
flag2+=flag;
}
if(flag2==0)
{
for(r=j;r<sum1;r++)
{
strcpy(word[r],word[r+1]);
}
sum1--;
j=i;
}
}
} //删除重复
//------------------------------------------------------------------------//
r=0;
flag2=0;
flag=1;
int flag3=0;
while(r<sum1)
{
flag3=0;
for(i=0;i<sum;i++)
{
if(strcmp(word[r],word2[i])==0)
{
flag3++;
}
}
time[r]+=flag3;
r++;
} //统计每个单词出现的次数
//-------------------------------------------------//
printf("\n总数:");
printf("%d\n",sum);
for(i=0;i<sum1;i++)
{
puts(word2[i]);
printf("-----次数:");
printf("%d",time[i]);
printf("\n");
}
}
在devcpp环境中运行无误 还可以对单词按照字母顺序进行排序 也可以对文章的容量进行修改,推荐使用函数来实现它 我懒0.0就这样
相关文章推荐
- Java 读取一段英文文档统计每个单词出现的次数和单词的总数
- 统计并输出英语短文中单词出现的次数
- 统计一段文字中出现频率最高的10个单词(c语言)
- c语言统计从文件读取的文章中所有单词的出现次数
- java 读取键盘输入到txt文件,统计每个单词出现的次数并输出
- Java 读取一段英文文档统计每个单词出现的次数和单词的总数
- Java实现读取键盘输入保存到txt文件,再统计并输出每个单词出现次数的方法
- 如何统计在一篇文章中某个单词出现了几次,以及第一次出现的位置
- 统计一篇英语文章每个单词出现的频率
- 如何用Python实现任一个英文的纯文本文件,统计其中的单词出现的个数?
- Java读取文本文件中一段英文统计单词个数
- C++统计英语句子中各个单词出现的次数
- C语言统计一篇英文短文中单词的个数实例代码
- 用C语言实现了对英文文章中单词频率的统计,得到出现最多的前十个!
- 使用java,计算一段文本中出现英语单词次数最多的单词
- 如何读取CSV文件,格式化数据,统计生日出现的次数
- 一个利用map统计一段英文文章中每个单词出现次数的小程序
- 输入一段英文文本,用程序统计出现频率最高和最低的两个单词;
- 统计一段英文中单词出现的次数
- 统计一段字符串中单词和字母各出现的次数