/*
需求:从键盘接收一长串字符,计算这串字符里面的单词个数,并将首字母大写输出
abf fasf ffasd asdarqw
char a[]={'a','b','c'}
让每一个字符与空格比较,如果等于空格,输出前面的字符,计数器加一,继续比较下面的数组,直到结束
*/
#include <stdio.h>
//#include <string.h>
int main()
{
char arr[100];//定义一个字符数组
int count=0;//计数器,用来计算你输入的字符个数
printf("请从键盘输入一串字符\n");
for (int i=0; i<100; i++)
{
scanf("%c",&arr[i]);
if (arr[i]=='\n')//以回车结束输入
{ break; }
count++;
}
for (int i=0; i<count; i++)
{
printf("%c",arr[i]);
}
printf("\n------------\n");
printf("count=%d\n",count);//打印一下输入了多少个字符
void chazhao(char arr[],int count);
chazhao(arr,count);
printf("------------方法二----------\n");
void chazhao1(char arr[],int count);
chazhao1(arr,count);
//gets(a);//字符串输入函数
//puts(a);//字符串输出函数
//printf("----%s\n",a);//%s也可以输出字符串,不用for遍历
return 0;
}
void chazhao1(char arr[],int count)//通过查找空格个数来判断单词个数
{
int m=0;
int i=0;
for (int i=0; i<count; i++)
{
if (i==0&&arr[i]!=' ')
{
printf("%c",arr[0]-32);
m++;
}
else if (i!=0&&arr[i]!=' ')//不遇到空格,直输出字符
{
printf("%c",arr[i]);
}
else if(arr[i]==' ')//遇到空格,输出空格跳出循环
{
//arr[i+1]=arr[i+1]-32;//小写转大写
printf("%c",' ');
if (arr[i+1]!=' ')//判断如果空格后面不是空格,后面的数大写
{
arr[i+1]=arr[i+1]-32;
m++;//大写,单词计数器加1
}
continue;//是空格就跳出循环继续判断
}
}
printf("\n总共有%d个单词\n",m);//输出单词个数
}
void chazhao(char arr[],int count)
{
int m=0,i=0;
while (i<count)
{
i++;
if (i-1==0&&arr[i-1]!=' ')//如果第一个字符不是空格,需要大写,计数器加1
{
printf("%c",arr[0]-32);
m++;
}
else
if (arr[i-1]==' ')
{
printf("%c",' ');
continue;
}
else
if(arr[i-2]==' '&&arr[i-1]!=' ')
{
printf("%c",arr[i-1]-32);
m++;//大写,单词计数器加一
}
else {
printf("%c",arr[i-1]);
}
}
printf("\n总共有%d个单词\n",m);
}
我原先用for循环没写出来,用while一下子写出来了,然后才写出了for的,for,while其实思想一样,只是开始忽略了如果先打空格或者多个空格判断的问题,感觉有点绕,如果大家有优化意见,可以指点我一下,谢谢!
|
|