《蜘蛛侠英雄归来网盘》百度云网盘云盘分享资源

c语言 统计一个字符串中单词的个数_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
c语言 统计一个字符串中单词的个数
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩3页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢&&/&&&&/&&&&/&&
文本检索是软件最常用的一个功能,用C语言写一段程序,统计某个文件中单词的个数。
提示:单词是以空格为分隔的。
文本检索是软件最常用的一个功能,下面的代码将教你如果使用C语言统计单词的个数。
代码实现:
#include &stdlib.h&
#include &stdio.h&
#include &string.h&
#include &conio.h&
// argc: 统计运行程序时命令行参数的个数
// *argv[]: 储存每个参数的字符串指针,每一个元素对应一个参数
int main (int argc,char *argv[])
int ch,bian=0,count=0;
char find[50],temp[1000];
//文件指针
// 判断是否输入文件
if (argc != 2){
printf(&请使用格式: %s 文件名&,argv[0]);
//非正常退出
// 判断能否成功打开文件
if ((pt = fopen(argv[1],&r&))== NULL){
//将argv[1]赋值给指针pt
printf(&打开文件 %s 失败&,argv[1]);
printf(&请输入要查找的单词:&);
gets(find);
while((ch=getc(pt))!=EOF){
//EOF 表示文件结束
if ((ch!=' ')&&(ch!='\n')){
temp[bian]=
temp[bian]='\0';
if ((strcmp(find,temp))==0) count++;
printf(&共在文件%s中查找到字符串\&%s\& %d 个\n&,argv[1],find,count);
代码分析上面的程序,需要在 dos 命令行下运行。 首先 cd 到程序的编译目录,然后输入程序名和文件名,例如,笔者编译后的程序位于 E:\cDemo\Debug\cDemo.exe,那么运行方式如下:
这里需要简单介绍一下 main() 函数。main() 函数是程序的入口函数,代码内部无法向其传参,只能在程序运行时由系统在向其传参。一般情况下不需要向main()函数传参,但是如果希望程序启动时可以读取有用数据,进行初始化处理,那么可以这样来传参:
& &int main (int argc, char *argv[])
argc 表示参数的个数,argv[] 以数组形式保存传递的所有参数。
注意,当前程序会作为第一个参数传递,例如上面输入 cdemo.exe &demo.txt,那么 argc =2,argc[0]=cdemo.exe,argc[1]=demo.txt
还有一种简单的传参方式,就是将文件(图标)拖到程序上,程序就会立即运行,并将该文件作为一个参数,效果与 cdemo.exe &demo.txt 相同。
关于main()函数的更多介绍请查看:
最后说一下实现单词搜索的思路,这是本程序的关键,这部分代码位于while循环内。
用gets读取用户输入的单词并保存到变量find,while((ch=getc(pt))!=EOF) 对文件进行读取,直到文件结束。
用if对读取的进程进行判断:将每次读取到的单个字符ch依次放入字符串数组temp[]中,直到遇到空格符或者换行符,则这个单词结束,添加&\0&结束标记。用strcmp()函数与用户搜索的单词find进行比较,如果匹配,则返回0,计数器count加1。最后令bian置0。
注意:英语书写时以空格来分隔每个单词,故我们以空格作为单词结束的标志。而之所以要加上换行符,是因为如果没有检测换行符,当单词在行首(或行末)时,就会和上一行(或下一行)的最后一个单词连在一起,视为1个单词与find比较,导致统计结果缺失。统计字符串中的单词个数
字符串中单词间以标点或空格间隔,但是注意,两个单词间不一定是一个空格或标点,应该考虑多个间隔字符的情况,如
fg(abc和de,和后面间隔有n个空格)
流程:遇到单词的第一个字母,不执行if,执行count+1,接着如果后面还是字母,就一直执行while循环,直到整个单词后面的第一个非单词字符,然后执行if内部,增加i,如果后面一直是非字母,用continue跳过后面所有,循环外面的while,直到遇到下一个单词的第一个字母,不执行if,执行++count,增加一个单词数,依次循环。注意:continue跳过的是整个while循环内continue后面的所有命令,即执行下一个while(str[i]!='\0').,
思路:遇到单词就加count,然后用后面的while循环过单词的所有字母,从后面第一个非字母开始,用continue跳过所有非字母,直到下一个单词再加count。
流程:遇到单词的第一个字母,不执行第一个while,count+1,执行第二个while直到最后一个字母,此时i指向最后一个单词后面的字符(因为是判断完再+1,如果通不过判断,就不+1,等价于while(isalpha(str[i]){++i;}).
执行第一个while,直到下一个单词的第一个字母,此时指向第一个字母,第一个while不执行,count+1,再执行下一个while。总体思路就是,用第一个while循环过所有非字母字符,遇到字母就加count,再用下一个while循环过所有字母。即count在每个单词的第一个字母处+1.
下面为将一个第一个参数的字符串分成单独的单词并存储在第二个参数数组中的函数:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。C语言统计一个字符串中单词的个数
假定每个单词用空格隔开。
输入:how are you!
两种方法:
#define SIZE 20
int main()
char str[SIZE]={'\0'};
int count=0;
printf("please input the string\n");
gets(str);
puts(str);
int length = strlen(str);
for (int i=0;i<i++)
//判断是不是空格不是的话在while里面i++执行判断到下一个空格的出现或是结束
if(str[i]!=&#39; &#39;)
while(str[i]!=&#39; &#39;&&str[i]!=&#39;\0&#39;)
printf("%d\n",count);
#define SIZE 20
int main()
char str[SIZE]={&#39;\0&#39;};
int count=0;
int flag=0;
printf("please input the string\n");
gets(str);
puts(str);
int length = strlen(str);
for (int i=0;i<i++)
//判断是不是空格,是的话flag=0,
//不是的话判断前面是不是空格即flag是否等于0,
//是空格的话说明是新单词的开始
if(str[i]==&#39; &#39;)
if(flag==0)
printf("%d\n",count);
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'

我要回帖

更多关于 蜘蛛侠英雄归来百度云 的文章

 

随机推荐