首页 > 试题广场 >

首字母大写

[编程题]首字母大写
  • 热度指数:27119 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
对一个字符串中的所有单词,如果单词的首字母不是大写字母,则把单词的首字母变成大写字母。 在字符串中,单词之间通过空白符分隔,空白符包括:空格(' ')、制表符('\t')、回车符('\r')、换行符('\n')。

输入描述:
输入一行:待处理的字符串(长度小于100)。


输出描述:
可能有多组测试数据,对于每组数据,
输出一行:转换后的字符串。
示例1

输入

if so, you already have a google account. you can sign in on the right.

输出

If So, You Already Have A Google Account. You Can Sign In On The Right.
#include<stdio.h>
#include<string.h>
#define maxn 100
char s[maxn];

int main() {
    int i;
    while (fgets(s, maxn, stdin) != NULL) {
        for (i = 0; i < strlen(s); i++) {
            if (i == 0 && (s[i] >= 'a' && s[i] <= 'z'))
                s[i] -= 'a' - 'A';
            if ((s[i] == ' ' || s[i] == '\t' || s[i] == '\n' || s[i] == '\r') &&
                    (s[i + 1] >= 'a' && s[i + 1] <= 'z')) {
                s[i + 1] -= 'a' - 'A';
            }

        }
        printf("%s", s);

    }




}
编辑于 2024-03-14 15:05:39 回复(0)
#include <stdio.h>

int main() {
    char c;
    int i = 0;
    char str[100];
    while((c = getchar()) != '\n'){
        str[i++] = c;
    }
    str[i] = '\0';
    if(str[0] >= 'a' && str[0] <='z')
        str[0] += 'A' - 'a';
    for(int j = 1;j < i;j++){
        if((str[j-1] == ' ' || str[j-1] == '\t' || str[j-1] == '\r' || str[j-1] == '\n') && str[j] >= 'a' && str[j] <='z')
        str[j] += 'A' - 'a';
    }
    for(int k = 0;k < i;k++)
        printf("%c",str[k]);
    return 0;
}
发表于 2023-03-24 17:01:20 回复(0)
#include <stdio.h>
#include <string.h>
char aToA(char ch) {
    return ch - 'a' + 'A';
}

int main() {
    char str[100];
    while (gets(str)) { // 注意 while 处理多个 case
        if (str[0] >= 'a' && str[0] <= 'z')
            str[0] = aToA(str[0]);
        int len = strlen(str);
        for (int i = 1; i < len - 1; i++) {
            if ((str[i] == ' ' || str[i] == '\t' || str[i] == '\t' || str[i] == '\n') &&
                    (str[i + 1] >= 'a' && str[i + 1] <= 'z'))
                str[i + 1] = aToA(str[i + 1]);
        }
        printf("%s", str);
    }
    return 0;
}

发表于 2023-03-15 00:06:24 回复(0)
#include <stdio.h>
#define N 101
int main(){
    char s[N];
    fgets(s, N, stdin);
    if (s[0]>='a'&&s[0]<='z') {
        s[0] += 'A'-'a';
    }
    for (int i = 1; s[i]!='\n'; i ++) {
        if ((s[i-1]==' '||s[i-1]=='\t'||s[i-1]=='\r'||s[i]=='\n')&&(s[i]>='a'&&s[i]<='z')) {
            s[i] += 'A'-'a';
        }
    }
    puts(s);
}

发表于 2023-02-13 12:27:33 回复(0)
  • ***canf从字符串中读取每个单词,令sp指向每个单词的首字母,将首字母改为大写并将sp移动到下一个单词的首字母。
#include <stdio.h>
#include <string.h>
#include <ctype.h>

#define maxn 105

char temp[maxn];
char s[maxn];

int main()
{
    while(fgets(temp, maxn, stdin) != NULL)
    {
        temp[strlen(s) - 1] = '\0';
        char *sp = temp;
        int num;
        for(num = 0;sscanf(sp, "%s", s) != EOF; num++)
        {
            *sp = toupper(*sp);
            sp += strlen(s);
            while (isspace(*sp))
                sp++;   
        }
        printf("%s\n", temp);
    }
    return 0;
}


发表于 2022-03-05 15:02:43 回复(0)
#include<stdio.h>
#include<string.h>

int main(){
	char s[100];
	while(gets(s)){
		for(int i=0;i<strlen(s);i++){
			if(i==0 && (s[i] >=97 && s[i]<=122))
				s[i]-=32;
			if((s[i]==' ' ||s[i]=='\t' ||s[i]=='\n' ||s[i]=='\r') && (s[i+1]>=97 && s[i+1]<=122))
				s[i+1]-=32;
		}
		for(int i=0;i<strlen(s);i++){
			printf("%c",s[i]);
		}
		printf("\n");
	}
}
有些投机取巧了,不过还是比较简短的
发表于 2022-01-18 12:51:32 回复(0)