字符串的大写字符

Uppercase characters of a String

本文关键字:字符 字符串      更新时间:2023-10-16

下面的代码应该使第一个字符大写,以及该字符的任何其他出现。

例如,如果输入是" complexity ",那么输出应该是" complexity "。但是输出却是" complicated "

#include <cctype>
#include <iostream>
#include <string>
int main()
{
    std::string cadena;
    std::cout << "Write a word: ";
    std::cin >> word;
    for (int i = 0; i < word.length(); i++)
    {
        if (word[0] == word[i])
            word[i] = std::toupper(word[i]);
    }
    std::cout << word<< 'n';
}

我的代码有什么问题?

当您比较第二个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]);
}

您甚至可以预先计算大写字符并在循环中使用它。

char c = Cadena[0];
char upperC = toupper(c);
for (i = 0; i < Cadena.length(); i++)
{
   if (c == Cadena[i])
      Cadena[i] = upperC;
}

因为您将第一个字符大写,所以第7个字符不再匹配。

不如这样修改你的循环。

char c = Cadena[0];
for (i = 0; i < Cadena.length(); i++)
{
    if (Cadena[i] == c)
        Cadena[i] = toupper(Cadena[i]);
}

在第一个循环Cadena[0] = 'C'之后,所以当您再次遇到这个字母时,您执行测试:if ('C' == 'c'),结果为false。

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

因为一旦在第一个字符上应用toupper,它就变成了大写。然后,当它与相同但小写的字符进行比较时,比较返回false。因为'C'和'C'不一样