c - 如何将单词的第一个字符与之前所有的小写字符大写然后打印
问题描述
用户输入一个词。该程序首先将所有字符转换为小写,然后仅将第一个字符大写,然后打印该单词。
我已经尝试过这种方式,但没有奏效:
#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 中,单引号内的任何内容都是整数字符常量。
如标准中规定。
整数字符常量是包含在单引号中的一个或多个多字节字符的序列,如 '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()
组合。
推荐阅读
- jquery - 如果我在验证电子邮件时收到错误,请重新加载表单
- git - 如何在我自己的 repo 中包含另一个 git repo,如子模块,但合并了额外的更改/pullrequests?
- c# - Unity 中逼真的阀轮旋转
- spring - JSF @ViewScoped 表现为 @ApplicationScoped
- python - 围绕 x 的位置绘制给定区间的积分
- python - 如何计算多个标记化单词列表中最常见的 10 个单词
- java - 我正在尝试从 android 应用程序中的 url 打开音频流?
- c - 原始数据类型的通用存储
- python - 如何只用一个 for 循环迭代两个列表?
- javascript - 是否可以使用 jquery 变量值作为点符号 javascript 中的键来查找和数组值