C++ 字符串的大写字符

C++ 字符串的大写字符,c++,C++,下面的代码应该使第一个字符成为大写,以及该字符的任何其他匹配项 例如,如果输入为“复杂”,则输出应为“复杂”。但结果却是“复杂化” #包括 #包括 #包括 int main() { 弦卡德纳; std::cout>word; for(int i=0;i

下面的代码应该使第一个字符成为大写,以及该字符的任何其他匹配项

例如,如果输入为“复杂”,则输出应为“复杂”。但结果却是“复杂化”

#包括
#包括
#包括
int main()
{
弦卡德纳;
std::cout>word;
for(int i=0;istd::cout因为第一个字符是大写的,所以第七个字符不再匹配

改为这样修改循环

char c = Cadena[0];
for (i = 0; i < Cadena.length(); i++)
{
    if (Cadena[i] == c)
        Cadena[i] = toupper(Cadena[i]);
}
charc=Cadena[0];
对于(i=0;i
因为一旦在第一个字符上应用了
toupper
,它就变成了大写。然后,当它与同一个字符进行比较时,比较返回
false
。因为“C”与“C”不同。

在比较第二个
C
时,第一个
C
已经转换为因此,
Cadena[0]==Cadena[i]
false

首先存储第一个字符,然后将其与字符串中的字符进行比较

char c = Cadena[0];
for (i = 0; i < Cadena.length(); i++)
{
   if (c == Cadena[i])
      Cadena[i] = toupper(Cadena[i]);
}
charc=Cadena[0];
对于(i=0;i
您甚至可以预先计算大写字符并在循环中使用它

char c = Cadena[0];
char upperC = toupper(c);
for (i = 0; i < Cadena.length(); i++)
{
   if (c == Cadena[i])
      Cadena[i] = upperC;
}
charc=Cadena[0];
char upperC=toupper(c);
对于(i=0;i
在第一个循环之后
Cadena[0]='C'
因此,当您遇到此字母的另一次出现时,您需要进行测试:
if('C'='C')
,结果为false


您应该首先将与第一个字符相同的字符大写(从
i=1开始循环),然后将循环的
后面的第一个字符大写。

将第一个字母大写后,您将只在同一个大写字母上执行if语句。您需要存储第一个字母,然后将其与字符串进行比较。您已经将第一个字符改为大写,
'C'!='C'
。我想知道为什么投票结果接近。因为答案是显而易见的?对提问者来说并不明显。通常,这有助于更好地理解在操作过程中检查变量内容时会发生什么。学会使用调试器或过度使用print语句,以在将来独自解决此类问题。我正在看一个问题-3。t的代表他回答是+10万。给了什么?非常感谢我的朋友,我理解你的例子。
char c = Cadena[0];
char upperC = toupper(c);
for (i = 0; i < Cadena.length(); i++)
{
   if (c == Cadena[i])
      Cadena[i] = upperC;
}