编写一个函数findStr(),该函数的功能是:统计一个以单词组成的字符串中(各单词之间以空格隔开)所含指定长度单词的个数。例如,输入字符串为"you are very good you",指定要查找的单词的长度为3,则函数返回值是3。
函数readWriteData()的功能是从IN.DAT中读取字符串和子字符串,并把统计结果输出到屏幕和文件OUT.DAT中。
注意:部分源程序已给出。
请勿改动主函数main()和函数WriteData(int n)中的内容。
试题程序:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void readWriteData();
int findStr(char*str,int find_len)
void main()
char str[81];
int find_len;
int n;
system("CLS");
printf("input the strings:");
gets(str);
printf("input the length:");
seanf("%d",&find_len);
puts(str);
printf("length=%d",find_len);
n=findStr(str,find_len);
printf("n=%d",n);
readWriteData();
void readWriteData()
char str[81],substr[11];
int n,len,i=0;
FILE*rf,*wf;
rf=fopen("IN.DAT","r");
wf=fopen("OUT.DAT","W");
while(i<3)
fgets(str,80,rf);
fgets(substr,10,rf);
len=substr[0]-’0’;
n=findStr(str,len);
fprintf(wf,"%d",n);
i++:
fclose(rf);
felose(wf);
参考答案:int findStr(char*str,int find len)
{
int str_len,i,count=0,mark=-1;
str_len=strlen(str);/*求出字符串的长度*/
for(i=0;i<str_len;i++)
{
if(*(str+i)>’z’||*(str+i)<’A’||(*(str+i)>’Z’&&*(str+i)<’a’))/*如果是非字母符号*/
{
if(i-mark==find_len+1)count++;
/*如果两个非字母符号当中的字母个数等于所要查找的长度,则将计数器加1*/
mark=i;/*将i记成标记*/
}
}
if(mark<str_len-1&&str_len-1-mark==find_len)count++;
/*如果是最后一个单词,当其长度等于所要查找的长度时就将计数器加1*/
return count;
}
解析: 本题主要考查如何在字符串中找单词。本程序将单词界定为,两个相邻的非字母符号间的字母为一个单词。所以在程序中通过找两个非字母符号之间字母的个数来确定单词的长度。如果单词长度等于要求查找的长度,则将计数器加1。在查找时应注意一行中的第一个单词和最后一个单词的特殊性,它们只有一侧有非字母符号,故要将其单独处理。