本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:
输入给出一行字符。
输出格式:
在一行中输出单词个数。
输入样例:
Let's go to room 209.
输出样例:
5
方法一
>_code
#include <stdio.h>
#include <string.h>
#define N 500
int main(int argc, char const *argv[])
{
char str[N] = "";
char arr[N] = "";
int i=0,j=0,count = 0;
int first_flag = 0,true_flag = 0;
int length;
if(fgets(str,N,stdin)==NULL)
{
perror("fgets");
return -1;
}
length = strlen (str);
str[--length] = '\0';
//先将str中单词取出,单词间只留一个空格
while(str[i]!='\0')
{
if(str[i]!=' ')//遇到“单词”
{
true_flag = 1;
arr[j] = str[i];//取出字符
first_flag = 1;
j++;
}
if(' '==str[i] && 1==first_flag)//遇到空格 && 空格前一个是字符
{
arr[j] = str[i];//取出空格
first_flag = 0;
j++;
}
i++;
}
//puts(arr);//test
//以空格为分界判断条件统计单词个数
length = strlen(arr);
for(i=0;i<length-1;i++)
{
if(' ' == arr[i] && 1 == true_flag)
{
count++;
}
}
if(1==true_flag)//有单词,全空格时不执行count++
{
count++;
}
printf("%d\n",count);
return 0;
}
整理:让无规则的一串字符串先成为有规则的一串字符
规则:根据规则计数
方法二
>_code
#include <stdio.h>
#include <string.h>
#define N 500
int main(int argc, char const *argv[])
{
char str[N] = "";
int length,i,count = 0;
int flag_now = 0,flag_front = 0;
if(fgets(str,N,stdin)==NULL)
{
perror("fgets");
return -1;
}
length = strlen (str);
str[--length] = '\0';
for(i=0;i<length;i++)
{
flag_front = flag_now;//记录前一个位置是啥
if(str[i]==' ')
flag_now = 0;//当前位置是空格
else
flag_now = 1;//当前位置是字符
//获取“单词”首字符
//初始前一个“位置”是0 && 当前位置看str[0]
// 前一个位置是空格 && 当前位置是字符
if(flag_front == 0 && flag_now == 1)
{
count++;
}
}
printf("%d\n",count);
return 0;
}
遍历到每个单词的开头时计数加1,找单词开头的特征
注意
#define N 过小无法通过网站的测试,会报答案错误,应该和它的测试程序的字符串大小有关
本文链接:https://shengto.top/c/pat_57.html
转载时须注明出处及本声明