C 大写字母的第一个字母忽略第一个单词

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

我试图使每个第一个单词的字母大写,但它忽略了第一个单词,跳转到第二个。 “苹果macbook”应该是“苹果macbook”,但它给了我“苹果macbook”。如果我添加
printf(“%c”,toupper(字符串[0])
fore循环和change
p=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:甚至没有可能。这是有保证的,很多代码都依赖于它。