首页 > 解决方案 > 如何将单词的第一个字符与之前所有的小写字符大写然后打印

问题描述

用户输入一个词。该程序首先将所有字符转换为小写,然后仅将第一个字符大写,然后打印该单词。

我已经尝试过这种方式,但没有奏效:

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

main()
{
   char word[100][50];
   int i, j, n;

   printf("How many words: ");
   scanf("%d", &n);

   printf("Enter the words one by one\n");
   for (i = 1; i <= n; i++)
   {
      scanf("%s", word[i]);
      strlwr(word[i]);
   }

   for (i = 1; i <= n; i++)
       toupper('word[i][1]');

   for (i = 1; i <= n; i++)
       printf("%s\n", word[i]);
}       

例如,当我输入 时"RODRICK",它会给出输出"rodrick"而不是"Rodrick"

标签: c

解决方案


在 C 中,单引号内的任何内容都是整数字符常量。

如标准中规定。

整数字符常量是包含在单引号中的一个或多个多字节字符的序列,如 'x'。宽字符常量是相同的,除了以字母 L 为前缀。除了稍后详述的少数例外,序列的元素是源字符集的任何成员;它们以实现定义的方式映射到执行字符集的成员。

由于 中有多个字节'word[i][1]',因此行为是实现定义的。

你可能想要的是

word[i][0] = toupper(word[i][0]);

在 C 中,索引0从而不是开始1

并且toupper()只返回一个值。未修改原始数组元素值。您可以将toupper()back 返回的值分配给word[i][0]

您还应该包含该函数的ctype.h头文件。toupper()


并且strlwr()是非标准函数。您可以改用循环和tolower()函数。请参阅如何在 C 中小写字符串?.


scanf()不是读取用户输入的最佳方式,即使您使用它,您也应该检查返回值以查看它是否成功。

相反,您可以使用fgets()-sscanf()组合。


推荐阅读