题目如下:
编写子程序 int wordnum(char *p)
程序说明:
返回*p指向的字符串中包含的单词的总数。其中,字符串为不规则字符串。单词与单词之间的划分规则,任意不为字母的字符,都可以是一个划分。
举例:
char str1[] = "";
char str2[] = " ,, ???, ^^& abc! ";
char str3[] = " ";
char str4[] = "I ??am? a bo^y";
char str5[] = " my ";
char str6[] = " Th8is is ,, , a? test ! ";
char str7[] = "Overseas students scramble for flights home! ";
char str8[] = " Whatever is worth doing is worth doing well.";
char str9[] = "In love folly is always sweet"
其中的单词数依次为:
0 1 0 5 1 5 6 8 6
已知主函数和子函数的调用过程如下:
int main()
{
char str1[] = "";
char str2[] = " ,, ???, ^^& abc! ";
char str3[] = " ";
char str4[] = "I ??am? a bo^y";
char str5[] = " my ";
char str6[] = " Th8is is ,, , a? test ! ";
char str7[] = "Overseas students scramble for flights home! ";
char str8[] = " Whatever is worth doing is worth doing well.";
char str9[] = "In love folly is always sweet";
int k;
k = wordnum(str1);
printf("Word number: %d\n",k);
k = wordnum(str2);
printf("Word number: %d\n",k);
k = wordnum(str3);
printf("Word number: %d\n",k);
k = wordnum(str4);
printf("Word number: %d\n",k);
k = wordnum(str5);
printf("Word number: %d\n",k);
k = wordnum(str6);
printf("Word number: %d\n",k);
k = wordnum(str7);
printf("Word number: %d\n",k);
k = wordnum(str8);
printf("Word number: %d\n",k);
k = wordnum(str9);
printf("Word number: %d\n",k);
return 0;
}
题目要求:编写完整子程序,并将程序完整程序代码 以及程序运行结果,粘贴至答案栏注意程序的格式,要符合要求。
做了好几遍,总是有几个错误地方,因为最近在读c primer plus.学会了用几个不常用的库函数 isalpha,
下面是正确答案和几个错误答案,求指教。错误的哪里出了问题:
正确
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>//函数库
int wordnum (char *p);
int main()
{
char str1[] = "";
char str2[] = " ,, ???, ^^& abc! ";
char str3[] = " ";
char str4[] = "I ??am? a bo^y";
char str5[] = " my ";
char str6[] = " Th8is is ,, , a? test ! ";
char str7[] = "Overseas students scramble for flights home! ";
char str8[] = " Whatever is worth doing is worth doing well.";
char str9[] = "In love folly is always sweet";
int k;
k = wordnum(str1);
printf("Word number: %d\n",k);
k = wordnum(str2);
printf("Word number: %d\n",k);
k = wordnum(str3);
printf("Word number: %d\n",k);
k = wordnum(str4);
printf("Word number: %d\n",k);
k = wordnum(str5);
printf("Word number: %d\n",k);
k = wordnum(str6);
printf("Word number: %d\n",k);
k = wordnum(str7);
printf("Word number: %d\n",k);
k = wordnum(str8);
printf("Word number: %d\n",k);
k = wordnum(str9);
printf("Word number: %d\n",k);
return 0;
}
int wordnum (char *p)
{
int word=0 ,i=0,num=0;
char c;
for(i=0;*(p+i)!='\0';i++)
{
c=*(p+i);
if(( word==0)&&(isalpha(c)))//isalpha如果是字母就返回1,else0
num++;
word=isalpha(c);
}
return num;
}
错误第一次:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int wordnum (char *p);
int main()
{
char str1[] = "";
char str2[] = " ,, ???, ^^& abc! ";
char str3[] = " ";
char str4[] = "I ??am? a bo^y";
char str5[] = " my ";
char str6[] = " Th8is is ,, , a? test ! ";
char str7[] = "Overseas students scramble for flights home! ";
char str8[] = " Whatever is worth doing is worth doing well.";
char str9[] = "In love folly is always sweet";
int k;
k = wordnum(str1);
printf("Word number: %d\n",k);
k = wordnum(str2);
printf("Word number: %d\n",k);
k = wordnum(str3);
printf("Word number: %d\n",k);
k = wordnum(str4);
printf("Word number: %d\n",k);
k = wordnum(str5);
printf("Word number: %d\n",k);
k = wordnum(str6);
printf("Word number: %d\n",k);
k = wordnum(str7);
printf("Word number: %d\n",k);
k = wordnum(str8);
printf("Word number: %d\n",k);
k = wordnum(str9);
printf("Word number: %d\n",k);
return 0;
}
int wordnum (char *p)
{
int word=0 ,i=0,num=0;
char c;
/*用word做标记,初始为0,读到一个,如果是字母,并且word==0(也就是说上衣不是字母),累加。不是的话就赋值word=0;
for(i=0;*(p+i)!='\0';i++)
{
c=*(p+i);
if( (word==0)&&((c>='A'&&c<='Z')||(c>='a'&&c<='z' ) ))
{
num++;
word=1;
}
else {word=0;}
}
return num;
}
错误二,改用while,感觉是一个错误。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int wordnum (char *p);
int main()
{
char str1[] = "";
char str2[] = " ,, ???, ^^& abc! ";
char str3[] = " ";
char str4[] = "I ??am? a bo^y";
char str5[] = " my ";
char str6[] = " Th8is is ,, , a? test ! ";
char str7[] = "Overseas students scramble for flights home! ";
char str8[] = " Whatever is worth doing is worth doing well.";
char str9[] = "In love folly is always sweet";
int k;
k = wordnum(str1);
printf("Word number: %d\n",k);
k = wordnum(str2);
printf("Word number: %d\n",k);
k = wordnum(str3);
printf("Word number: %d\n",k);
k = wordnum(str4);
printf("Word number: %d\n",k);
k = wordnum(str5);
printf("Word number: %d\n",k);
k = wordnum(str6);
printf("Word number: %d\n",k);
k = wordnum(str7);
printf("Word number: %d\n",k);
k = wordnum(str8);
printf("Word number: %d\n",k);
k = wordnum(str9);
printf("Word number: %d\n",k);
return 0;
}
int wordnum (char *p)
{
int word=0 ,i=0,num=0;
char c;
while(c=*(p+(i++))!='\0')
{
if( (word==0)&&((c>='A'&&c<='Z')||(c>='a'&&c<='z' ) ))
{
num++;
word=1;
}
else {word=0;}
}
return num;
}