首字母变大小写

博客围绕输入英文句子将每个单词首字母改成大写字母的需求展开。先介绍最初思路及代码,测试发现问题后,在discuss启发下将循环次数缩减为一次。还指出gets()和scanf()读取机制不同,强调培养一次循环完成需求的意识,避免代码臃肿。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目要求:输入一个英文句子,将每个单词的第一个字母改成大写字母。
思路:开始用一个数组,通过一个循环记录每个词组之间的空格位置,再通过第二个循环将空格后一位的字母减32(注意第一个词组需要之前没有空格,需要加上相关代码处理)。
代码如下:

#include <stdio.h>
#include <string.h>
//大小写字母之间相差32
int main(){
    char a[100];
    int loc[100];
    int len,i,n;
    while(gets(a)){
        n=0;
        len=strlen(a);
        for(i=1;i<len;i++){
            if(a[i]==' '){//字符需要用''来赋值!! 
                loc[n++]=i;//i记录了空格的位置,第一个空格的前后两个字母需要进行大写处理 
            }
        }
        a[loc[0]-1]=a[loc[0]-1]-32;//问题出在这里!倘若句子开头不是一个字母,就会产生错误。 
        a[loc[0]+1]=a[loc[0]+1]-32;
        for(i=1;i<n;i++)
            a[loc[i]+1]=a[loc[i]+1]-32;//这里怎么能直接复制粘贴呢!! 
        printf("%s\n", a);
    }
}

然而测试之后出现问题,经检查发现问题所在,问题已通过注释给出。
在discuss中得到灵感,将循环次数缩减为一次。
代码如下:

#include <stdio.h>
#include <string.h>
//大小写字母之间相差32
int main(){
	char a[100];
	int loc[100];
	int len,i,n;
	while(gets(a)){
		len=strlen(a);
		a[0]=a[0]-32;
		for(i=1;i<len;i++){
			if(a[i]==' ')
				a[i+1]=a[i+1]-32;
		}
		printf("%s\n", a);
	}
}

这题和之前的题目存在一点不同:while()中的语句变为了gets(),它的作用是直接从缓冲区中读入一行字符串并且将最后的\n抛掉。而scanf()的读取机制为遇到空格就停下,不满足本题的要求。

很多需求通过一次循环即可完成,需要培养这种意识,避免代码过于臃肿。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值