【问题标题】:converting to upper and lower case in c++在 C++ 中转换为大写和小写
【发布时间】:2013-01-25 23:51:48
【问题描述】:

我用c++写了这段代码

   #include <iostream>
   using namespace std;

    char convert1 (char x[])
    {
    for ( int i =0; i<5;i++)
    {
    if ( i/2 ==0 )
    x[i] =tolower(x[i]);
    else
    x[i] = toupper(x[i]);

    return x[i];

}
    }

   int main()
   {
      char z[] = "REDCA";
      cout<<convert1(z); 
      return 0;
   }

它会工作,但它总是只打印第一个字母 R 的小写字母。但我想像这样打印完整的单词 氯化钙

请问如何修改

【问题讨论】:

标签: c++ visual-c++ c++11 c++builder


【解决方案1】:

您想要if(i%2 == 0) 而不是if(i/2 == 0)(可能是错字)。

另外,您只返回x[i],它是一个char。更好的主意是使用std::string 而不是char *,但您也可以使用char * 来实现这一点。 (我不会提供完整的代码,正如我们在您之前的问题中所确定的,这是您的任务,您应该这样做,而不是我们。)

【讨论】:

    【解决方案2】:

    convert1 的返回值为char。所以,cout &lt;&lt; convert1(x) 看到了 char,因此你只得到了第一个 r

    你可能想要这样的东西:

    template<size_t S>
    char const* convert1(char (&x)[S])
    {
        for(int i = 0; i < S; ++i)
        {
            if(i%2 ==0) {
                x[i] = tolower(x[i]);
            } else {
                x[i] = toupper(x[i]);
            }
        }
    
        return x;
    }
    

    想要更好,请使用std::string

    【讨论】:

    • @Ahmed 你的任务,你的工作。使用这个网站来获得完整的家庭作业解决方案是作弊。
    • @AhmedYaisn 请不要问作业问题,当我为你解决问题时,我的嘴巴会很糟糕。
    • @sehe 直到我意识到这是一个家庭作业问题。啊,好吧,必须练习我新发现的(并且永远不会再次使用)模板来传递数组技能。
    • @AlexChamberlain bool cheers(T (&amp;cya)[N]) { return N&gt;0; } :)
    猜你喜欢
    • 2011-01-23
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 2011-07-21
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    相关资源
    最近更新 更多