面试题:字符串的空格计数和单词计数

给定一个字符串,统计字符串中的空格数,和单词数。

先定义两个宏,来判断是字母还是空格。

#define ISALAPH(p) ((( p ) >= 'a' && (p) <= 'z') || (( p ) >= 'A' && (p) <= 'Z'))
#define ISSPACE(p)  ((p) == ' ')

统计所有空格,单词

如果当前字符是字母,先判断它前面是不是字母,如果前面不是字母,那单词数加1,否则无操作。

如果当前字符为空格,空格加1.

if( ISALAPH(*p) )
        {
            if(balaph == 0)
                wordCnt++;
            balaph = 1;
           // bspace = 0;
        }
        else if(ISSPACE(*p))
        {
			//if(bspace == 0)
				spaceCnt++;
            balaph = 0;
			//bspace == 1;
        }
        else
        {
            balaph = 0;
            //bspace = 0;
        }

将重复的空格合并的统计方法

统计单词方法不变,增加一个变量来表示前面一个字符是否空格即可。

如果前面字符为空格,则不操作,否则,空格加1.

如上面代码去掉注释。

完整源代码

#include <stdio.h>
#include <string.h>

#define ISALAPH(p) ((( p ) >= 'a' && (p) <= 'z') || (( p ) >= 'A' && (p) <= 'Z'))
#define ISSPACE(p)  ((p) == ' ')

int main()
{
    char* ptext = " hello  a b c me world xidian university .. ? this is a ?";

    bool balaph = 0;
    //bool bspace = 0;
    char* ptextEnd = ptext + strlen(ptext);

    int wordCnt = 0;
    int spaceCnt = 0;
    char* p = ptext;
    while(p < ptextEnd)
    {
        if( ISALAPH(*p) )
        {
            if(balaph == 0)
                wordCnt++;
            balaph = 1;
           // bspace = 0;
        }
        else if(ISSPACE(*p))
        {
			//if(bspace == 0)
				spaceCnt++;
            balaph = 0;
			//bspace == 1;
        }
        else
        {
            balaph = 0;
            //bspace = 0;
        }

        p++;
    }

    printf("spacecnt: %d, wordcnt: %d", spaceCnt,wordCnt);

    return 0;

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值