c语言中首字母大写函数

三个大写单词转换为首字母大写,其他都为小写,像这种代码应该怎么搞,拯救无奈学子吧

#include <stdio.h>

void Title(char *ch);

int main() {
    char str[100];
    printf("请输入字符串:");
    fgets(str, 100, stdin);
    Title(str);
    printf("转换后的结果:%s", str);
    return 0;
}

void Title(char *ch) {
    int i = 0;
    while (ch[i]) {
        if (i == 0 && ch[i] >= 'a' && ch[i] <= 'z') {
            ch[i] = ch[i] - 'a' + 'A';
        }
        else fi (i > 0 && ch[i] >= 'A' && ch[i] <= 'Z') {
            ch[i] = ch[i] - 'A' + 'a';
        }
        i++;
    }
}

这段代码是将全是大写字母组成的字符串,改为每个单词首字母大写其它小写,供参考:

#include <stdio.h>
void convert(char *str)
{
    int i ,flg;
    for (i = 0, flg = 1; str[i]; i++)
    {
        if (str[i] >= 'A' && str[i] <= 'Z') {
            if (flg) { flg = 0; continue; }
            str[i] += 32;
        }
        else if (str[i] == ' ')
            flg = 1;
    }
}
int main()
{
    int  i, flg;
    char str[32] = { "ZHANG SAN" };
    gets(str);
    convert(str);
    puts(str);
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7753524
  • 这篇博客也不错, 你可以看下c语言学习-自定义函数并调用将一个字符串中的小写字母改为大写字母(数组元素和数组名作函数参数)
  • 除此之外, 这篇博客: C语言:反转整个字符串,并将全部小写字母转换为大写字母中的 字符串中的大小写转换 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    ASCII码中英文字母的大小写相差32,大写字母在前,小写字母在后,因此将大写字母全部转换为小写应当加32,反之应当加32。

    #include<stdio.h>
    #include<string.h>
    #define LENGTH 50
    
    void reverseStringUpper(char *p, char *q, int len) {
    	if ((p == NULL) || (q == NULL) || (len == 0))
    		return;
    	if (len == 1) {
    		*p = *p - 32;
    		return;
    	}	
    	char temp;
    	
    	//反转整个字符串   
    	while (p < q) {
    		temp = *p - 32;
    		*p = *q - 32;
    		*q = temp;
    		p++;
    		q--;
    	}
    	return;
    }
    
    

    测试函数

    void test1() {   //测试句子
    	char a[LENGTH] = "I love programming";
    
    	int len = strlen(a);
    	reverseStringUpper(&a, &a[len - 1], len);
    
    	printf("%s\n", a);
    }
    
    
    void test2() {  //测试单词
    	char a[LENGTH] = "programming";
    
    	int len = strlen(a);
    	reverseStringUpper(&a, &a[len - 1], len);
    
    	printf("%s\n", a);
    }
    
    void test3() {   //测试单字母
    	char a[LENGTH] = "a";
    
    	int len = strlen(a);
    	reverseStringUpper(&a, &a[len - 1], len);
    
    	printf("%s\n", a);
    }
    
    void test4() {   //测试空字符串
    	char a[LENGTH] = "";
    
    	int len = strlen(a);
    	reverseStringUpper(&a, &a[len - 1], len);
    
    	printf("%s\n", a);
    }
    void test5() {   //测试空格
    	char a[LENGTH] = " ";
    
    	int len = strlen(a);
    	reverseStringUpper(&a, &a[len - 1], len);
    
    	printf("%s\n", a);
    }
    

    注意:reverseStringUpper函数中的指针设置为char型,因此调用时应使用&a和&a[len - 1],即某一个char型变量的地址。

    int main() {
    	test1();
    	test2();
    	test3();
    	test4();
    	test5();
    	return 0;
    }
    

    运行结果:
    在这里插入图片描述

  • 您还可以看一下 钟洪发老师的鸿蒙设备开发之C知识点全面梳理课程中的 网络数据传输的大小端问题小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^