统计一个字符串中的单词数

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));;

猜你喜欢

转载自blog.csdn.net/ye1223/article/details/79694703
今日推荐