题目:
输入一个字符串,求它包含多少个单词。单词间以一个或者多个空格分开。
第一个单词前,最后一个单词后也可能有0到多个空格。
比如:" abc xyz" 包含两个单词,"ab c xyz " 包含3个单词。
思路分析:
- 变量n用来计算有几个单词,
- tag 等于1则说明指针p指向了空格,tag等于0说明指针p指向的是单词,
- 如果指针p指向字符串中的一个字符不为空并且tag等于1(说明当前p指针的前一个指向了空格,前一个是空格,当前不是空格,则代表新的单词开始),则n++,令tag=0;
- 如果指针p指向字符串中一个字符为空,则令tag=1。
代码:
#include<iostream>
using namespace std;
int get_word_num(char* buf)
{
int n = 0;
int tag = 1;
char* p = buf;
for (; *p != 0 && *p != 13 && *p != 10; p++) {
if (*p == ' ' && tag == 0) tag = 1;
if (*p != ' '&&tag == 1) { n++; tag = 0; }
}
return n;
}
int main()
{
char buf[1000];
fgets(buf, 1000, stdin);
printf("%d\n", get_word_num(buf));
return 0;
}
注:ASCII码0为null,13为回车,10为换行。