題目如下:
編寫子程序 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;
}