字符串的大写字符

时间:2015-10-22 20:24:09

标签: c++

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

例如,如果输入是"并发症",则输出应为" CompliCation"。但输出是"并发症"代替。

#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';
}

我的代码出了什么问题?

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

改为修改你的循环。

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

答案 2 :(得分:1)

因为一旦你在第一个字符上应用toupper它就会变成大写字母。然后,当它与相同的字符进行比较但是小写时,比较返回false。因为&#39; C&#39;与&#39; c&#39;不相同。

答案 3 :(得分:1)

在第一个循环Cadena[0] = 'C'之后,当您遇到此字母的另一次出现时,您将执行测试:if ('C' == 'c'),结果为false。

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