C 大写字母的第一个字母忽略第一个单词
我试图使每个第一个单词的字母大写,但它忽略了第一个单词,跳转到第二个。 “苹果macbook”应该是“苹果macbook”,但它给了我“苹果macbook”。如果我添加C 大写字母的第一个字母忽略第一个单词,c,string,whitespace,toupper,C,String,Whitespace,Toupper,我试图使每个第一个单词的字母大写,但它忽略了第一个单词,跳转到第二个。 “苹果macbook”应该是“苹果macbook”,但它给了我“苹果macbook”。如果我添加printf(“%c”,toupper(字符串[0])fore循环和changep=1fore循环中它给出了正确的结果,但如果字符串以空格开头,它将失败。 代码如下: #include <stdio.h> #include <string.h> #include <ctype.h> int ma
printf(“%c”,toupper(字符串[0])
fore循环和changep=1
fore循环中它给出了正确的结果,但如果字符串以空格开头,它将失败。
代码如下:
#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;
}
#包括
#包括
#包括
int main()
{
字符字符串[]=“苹果macbook”;
INTP;
对于(p=0;p而言,简单的解决方法如下:
for(p = 0; p<strlen(string); p++)
{
if(p == 0 || string[p - 1] == ' ')
{
printf("%c", toupper(string[p]));
}
else
{
printf("%c", string[p]);
}
}
for(p=0;p更改此项:
char string[] = "apple macbook";
为此:
char string[] = " apple macbook";
你会得到你想要的
原因是,在循环中,您会搜索一个空格,以便在之后更改字母
然而,niyasc的答案更好,因为它不会改变输入字符串,而是改变程序的逻辑
我这样做主要是为了利用你所遇到的行为的原因,从而促使你自己改变你的逻辑。:)显然,代码不起作用,因为字符串中的第一个字母是一个特殊情况,前面没有空格。您必须单独处理该特殊情况。此外,您需要从0迭代到strlen(字符串)-1
,否则您的程序将始终销毁空终止符,然后当空格是字符串的最后一个字母时崩溃。您是否感到惊讶?在“Apple”之前没有空格。您将测试if语句中的空白字符。下一个字符将转换为大写。请尝试if(p==0 | | string[p]='')
@gsamaras:你说好像更改输入字符串是个好主意…:-)
Hmmm@MOehm你说得对,我会更新我的问题!@xxxvodnikxxx如果p为零,它将不会用于下一个条件,即,字符串[p-1]==''
@xxxvodnikxxx:C的短路求值保证了当左表达式为true时,逻辑or的表达式右侧不会求值,这意味着整个表达式必须为true。@xxxvodnikxxx:甚至没有可能。这是有保证的,很多代码都依赖于它。