gpt4 book ai didi

c - 'toupper' 和 'tolower' 对 C 中的 char 数组没有影响

转载 作者:行者123 更新时间:2023-11-30 14:41:50 25 4
gpt4 key购买 nike

我正在创建一个创建用户名的函数。系统会要求用户输入名字,然后输入姓氏。姓氏与名字的第一个字母连接。此外,任何大写字母都应转换为小写字母。因此输入“John DoE”应等于“jdoe”。

另一个函数计算字符串“THiS Sentence HAS SOMe Low CASE CharAcTERs”中小写字母的数量。然后将小写字母转换为大写字母并打印字符串。

第一个函数不会将大写字母转换为小写字母。第二个函数甚至无法识别任何字符的 ASCII 值。

我尝试对这两个函数使用指针,但输出没有变化。

void createUsername()
{
int j = 1;
char firstName[15], lastName[15], userName[20];

printf("Enter your first name : ");
fgets(firstName, 15, stdin);
firstName[strlen(firstName) - 1] = '\0';

printf("Enter your last name : ");
fgets(lastName, 15, stdin);
lastName[strlen(lastName) - 1] = '\0';

userName[0] = tolower(firstName[0]);

for (int i = 0, j; lastName[i] != '\0'; i++, j++)
userName[j] = tolower(lastName[i]);
userName[j+1] = '\0';

printf("User name : %s", userName);
}

void lowerToUpperCase()
{
char sentence[] = "THiS SentENCE HAS SOMe LoWEr CASE ChARAcTERs";
int lowerCases = 0;
for (int i = 0; sentence[i] != '\0'; i++)
{
if ((sentence[i] >= 97) && (sentence[i] <= 122))
{
lowerCases++;
sentence[i] = toupper(sentence[i]);
}
}
printf("Number of lower case characters= %d \n", lowerCases);
printf("Upper case sentence : %s \n", sentence);
}

Joe SMITH 的预期输出应该是 jsmith。小写字母的数量应为 10,并且句子应全部大写。

实际输出给出JSMITH,小写字母个数为0,该句子打印原文。

最佳答案

让我们从简单的事情开始,然后从那里开始:

您可以轻松比较asentence[i] 。这样做:

if ((sentence[i] >= 'a') && (sentence[i] <= 'z'))
{
lowerCases++;
sentence[i] = toupper(sentence[i]);
}

接下来是这样的:

i < lastName[i] != '\0'

这到底是什么鬼?如果你看一下这个页面: https://en.cppreference.com/w/c/language/operator_precedence你会看到<优先于!= .

编辑:

for (int i = 0, j; lastName[i] != '\0'; i++, j++)

j在这里重新初始化为 for() 的局部变量循环所以它可能会得到 0 但在我的例子中它总是有一些垃圾和设置错误。所以这样写:

for (int i = 0; lastName[i] != '\0'; i++, j++)

然后你就可以出发了。

关于c - 'toupper' 和 'tolower' 对 C 中的 char 数组没有影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54729736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com