1.思路分析:
单词的数目可以有空格出现的次数来进行统计,判定原则:当出现“ * 空格+字母
* ”的组合是,认定一个单词出现。但是需要注意以下几点:
(1)字符串默认:字符串中只包含空格和字母2种字符,不会出现别的特殊字符;
(2)字符开头的空格不在计算内:因此fspace初始值为1
2.实现代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *p = NULL;
char *q = NULL;
int num = 0;
int fspace = 1; //注意:fspace初始化必须是1;
p = (char*)malloc(1);
gets(p);
q = p;
while(*q != '\0')
{
if(*q == ' ')
{
fspace = 1;
}
else
{
if(fspace==1)
{
num++;
fspace = 0; //注意:一定要将fspace清0;
}
}
q++;
}
printf("num = %d",num);
free(p);
p = q = NULL;
return 0;
}
3.注意事项:
(1)malloc需要和free配合使用,避免内存泄露;
(2)指针在使用完毕后,需要指向NULL,避免成为野指针;
(3)注意p的值,以及p+1的值:
p的值:malloc调用后,系统在堆中分配的一个字节内存的地址address。
p +1:即上述address+1;
但是:系统分配时,可以确定address对应的内存是空闲态(未被使用),因此分配给p;但是并不能确定address+1的内存也是空闲态。当值给p分配一个字节内存但是其指向一个字符串时,字符串会依次保存在address与其之后的部分内存中。因此,本人认为:p = (char*)malloc(1)操作是有风险的。
(4)C语言中:在不确定输入字符串的长度时,应该将缓存区设置大一些,设置1024,即1k byte(虽然还是可能会出现越界)。可以采用2种方式保存字符串:数组和字符串指针。
具体方式:char array[1024];或char p = (char)malloc(1024)等于char p = (char)malloc(1024*sizeof(char));;