给定一个字符串,统计字符串中的空格数,和单词数。
先定义两个宏,来判断是字母还是空格。
#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;
}