C 第一个字母大写忽略第一个单词
C first letter to uppercase ignores first word
我试图让每个第一个单词的字母大写,但它忽略了第一个单词并跳到第二个。
"apple macbook" 应该是 "Apple Macbook",但它给了我 "apple Macbook"。如果我在 for 循环之前添加 printf(" %c", toupper(string[0]));
并在 for 循环中更改 p=1
它会给出正确的结果,但是如果字符串以 space 开头那么它将失败。
这是代码:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
char string[] = "apple macbook";
int p;
for(p = 0; p<strlen(string); p++)
{
if(string[p] == ' ')
{
printf(" %c", toupper(string[p+1]));
p++;
}
else
{
printf("%c", string[p]);
}
}
return 0;
}
一个简单的解决方法如下:
for(p = 0; p<strlen(string); p++)
{
if(p == 0 || string[p - 1] == ' ')
{
printf("%c", toupper(string[p]));
}
else
{
printf("%c", string[p]);
}
}
改变这个:
char string[] = "apple macbook";
对此:
char string[] = " apple macbook";
你会得到你想要的。
原因是在你的循环中,你搜索了一个 space 以在之后更改字母。
然而,niyasc 的答案更好,因为它不会改变输入字符串,而是改变程序的逻辑。
我这样做主要是为了利用你得到你遇到的行为的原因,以便敦促你自己改变你的逻辑。 :)
我试图让每个第一个单词的字母大写,但它忽略了第一个单词并跳到第二个。
"apple macbook" 应该是 "Apple Macbook",但它给了我 "apple Macbook"。如果我在 for 循环之前添加 printf(" %c", toupper(string[0]));
并在 for 循环中更改 p=1
它会给出正确的结果,但是如果字符串以 space 开头那么它将失败。
这是代码:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
char string[] = "apple macbook";
int p;
for(p = 0; p<strlen(string); p++)
{
if(string[p] == ' ')
{
printf(" %c", toupper(string[p+1]));
p++;
}
else
{
printf("%c", string[p]);
}
}
return 0;
}
一个简单的解决方法如下:
for(p = 0; p<strlen(string); p++)
{
if(p == 0 || string[p - 1] == ' ')
{
printf("%c", toupper(string[p]));
}
else
{
printf("%c", string[p]);
}
}
改变这个:
char string[] = "apple macbook";
对此:
char string[] = " apple macbook";
你会得到你想要的。
原因是在你的循环中,你搜索了一个 space 以在之后更改字母。
然而,niyasc 的答案更好,因为它不会改变输入字符串,而是改变程序的逻辑。
我这样做主要是为了利用你得到你遇到的行为的原因,以便敦促你自己改变你的逻辑。 :)