用C将名字ZHANG SAN转换成为Zhang San输出.

.将你的名字ZHANG SAN转换成为Zhang San输出.怎么用C语言将全是大写的字母改成只有开头是大写的啊


#include <stdio.h>
#include <ctype.h>
#include <string.h>

void capitalizeString(char* str) {
    int i;

    // 将字符串转换为小写
    for (i = 0; str[i]; i++) {
        str[i] = tolower(str[i]);
    }

    // 将开头字母转换为大写
    str[0] = toupper(str[0]);
}

int main() {
    char name[] = "ZHANG SAN";

    printf("原始字符串: %s\n", name);

    capitalizeString(name);

    printf("转换后的字符串: %s\n", name);

    return 0;
}

可以遍历字符串,将首字母或前面是空格的字符转为大写,然后将不是首字母且前一个字符不是空格的字符转为小写,应该就可以了。

代码如下:

参考链接:


#include <stdio.h>


int main(void) {
    
    
    char name[20]="ZHANG SAN";
//    char name[20]="zhu ge kong ming";
    
     int i=0;
     
     while(name[i]!='\0'){ // 遍历整个姓名字符串 
         
          // 如果当前字符不是第一个字符,且前面不是空格字符串 
          //  则将当前字符转为小写 
         if(i>0&&name[i-1]!=' '){ 
             
             // http://ascii.wjccx.com/
           // 如果是大写字母,则转为小写 
             if(name[i]>='A'&&name[i]<='Z'){
                 name[i] = name[i] + 32;    
            }
       //  如果当前字符是第一个字符,或者 不是第一个字符但前面是空格
       //  则将当前字符转为大写    
        }else if(i==0 || (i>0&&name[i-1]==' ')){
            if(name[i]>='a'&&name[i]<='z'){
                 name[i] = name[i] - 32;    
            }
        }
        
         i++;  // 访问下一个字符位置 
     }
    
    // 打印结果 
    printf("转换后,姓名拼音为:%s\n",name);
    
    return 0;
    
}

img

供参考:

#include <stdio.h>
int main()
{
    int  i, flg;
    char str[32] = { "ZHANG SAN" };
    gets(str);
    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;
    }
    puts(str);
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

  • 以下回答来自chatgpt:

    我们可以使用C语言的字符串处理函数和字符处理函数来实现将大写字母的名字转换为只有首字母大写的格式。具体步骤如下:

    1. 使用fgets()或gets()函数获取输入的字符串,存储在一个字符数组中。

    2. 使用strtok()函数将输入的字符串按照空格分割成一个个单独的单词。

    3. 对于每个单词,将首字母转换为大写,其余字母转换为小写。

    4. 将每个转换后的单词重新组合成一个字符串。

    5. 输出转换后的字符串。

    下面是实现代码:

    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    
    int main() {
        char name[100];  // 定义一个字符数组存储输入的名字
        char *token;  // 定义指针用于分割字符串
        char new_name[100] = "";  // 定义一个字符串存储转换后的名字
        fgets(name, 100, stdin);  // 获取输入的字符串
        token = strtok(name, " ");  // 使用strtok()函数分割字符串
        while (token != NULL) {
            for (int i=0; i<strlen(token); i++) {
                if (i == 0) {
                    new_name[strlen(new_name)] = toupper(token[i]);  // 首字母转为大写
                } else {
                    new_name[strlen(new_name)] = tolower(token[i]);  // 其余字母转为小写
                }
            }
            strcat(new_name, " ");  // 在单词后加上空格
            token = strtok(NULL, " ");  // 继续使用strtok()函数分割字符串
        }
        printf("%s\n", new_name);  // 输出转换后的名字
        return 0;
    }
    

    注意事项:

    1. 使用fgets()函数获取输入的字符串时需要指定最大输入长度,防止越界。

    2. 使用strtok()函数分割字符串时需要注意参数的格式,例如本题中使用空格作为分隔符。

    3. 需要使用ctype.h头文件中的函数来进行大写和小写字母的转换。

    4. 在重新组合字符串时需要注意不能漏掉空格,否则单词之间将会连在一起。


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