A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*
需求:从键盘接收一长串字符,计算这串字符里面的单词个数,并将首字母大写输出
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其实思想一样,只是开始忽略了如果先打空格或者多个空格判断的问题,感觉有点绕,如果大家有优化意见,可以指点我一下,谢谢!


1 个回复

正序浏览
其实我一直在纠结一个问题,如果我从键盘接收的字符长度超过了字符数组的长度,怎么办,但是我们在定义数组的时候必须先定义数组的长度,这个长度既然定下来了,那么输入的数组元素就有可能超过了数组长度,不知道怎么解决
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马