【问题标题】:How to make this upper lower case c++ program work? [duplicate]如何使这个大写小写 C++ 程序工作? [复制]
【发布时间】:2021-12-25 20:18:13
【问题描述】:

我正在尝试制作这个将字符串的大写字符转换为小写的应用程序 反之亦然。

但是当我运行代码时,它会显示一个非常奇怪的输出

我写的代码:

#include <iostream>
#include <string.h>

std::string toggle(std::string str)
{
    #define maxsize 100
    if (sizeof(str)>maxsize)
    {
        std::cout << "Size of string is too big!" << std::endl;
        exit(1);
    }
    else
    {
        for (int i = 0 ; i<=sizeof(str) ; i++)
        {
            if (isupper(str[i]))
            {
                std::cout << "UPPER CASE CONVERTED TO LOWER CASE "<< tolower(str[i]) <<"" << std::endl;
            }
            else
            {
                std::cout << "LOWER CASE CONVERTED TO UPPER CASE "<< toupper(str[i]) <<"" << std::endl;
            }

        }
    }
}


int main()
{
    toggle("Hello This Is A Test");
}

输出

UPPER CASE CONVERTED TO LOWER CASE 104
LOWER CASE CONVERTED TO UPPER CASE 69
LOWER CASE CONVERTED TO UPPER CASE 76
LOWER CASE CONVERTED TO UPPER CASE 76
LOWER CASE CONVERTED TO UPPER CASE 79
LOWER CASE CONVERTED TO UPPER CASE 32
UPPER CASE CONVERTED TO LOWER CASE 116
LOWER CASE CONVERTED TO UPPER CASE 72
LOWER CASE CONVERTED TO UPPER CASE 73
LOWER CASE CONVERTED TO UPPER CASE 83
LOWER CASE CONVERTED TO UPPER CASE 32
UPPER CASE CONVERTED TO LOWER CASE 105
LOWER CASE CONVERTED TO UPPER CASE 83
LOWER CASE CONVERTED TO UPPER CASE 32
UPPER CASE CONVERTED TO LOWER CASE 97
LOWER CASE CONVERTED TO UPPER CASE 32
UPPER CASE CONVERTED TO LOWER CASE 116
LOWER CASE CONVERTED TO UPPER CASE 69
LOWER CASE CONVERTED TO UPPER CASE 83
LOWER CASE CONVERTED TO UPPER CASE 84
LOWER CASE CONVERTED TO UPPER CASE 0
LOWER CASE CONVERTED TO UPPER CASE 0
LOWER CASE CONVERTED TO UPPER CASE 0
LOWER CASE CONVERTED TO UPPER CASE 0
LOWER CASE CONVERTED TO UPPER CASE -73
LOWER CASE CONVERTED TO UPPER CASE -125
LOWER CASE CONVERTED TO UPPER CASE -97
LOWER CASE CONVERTED TO UPPER CASE 34
UPPER CASE CONVERTED TO LOWER CASE 119
UPPER CASE CONVERTED TO LOWER CASE 98
LOWER CASE CONVERTED TO UPPER CASE 0
LOWER CASE CONVERTED TO UPPER CASE 0
LOWER CASE CONVERTED TO UPPER CASE -48

为什么显示整数而不是字符串? 我是不是做错了什么?

我可以看到它正在将大写字符转换为小写并返回,但为什么它不显示字符串?

【问题讨论】:

  • #define maxsize 100 C++ 不是 C。使用 const 而不是预处理器宏。一般来说,在 C++ 中,一般避免使用#define
  • "为什么显示整数而不是字符串?" - 它打印str 中每个char 的数值,因为这就是您的for 循环和str[i] 将执行的操作。
  • tolowertoupper 实际上将ints 作为参数,然后返回ints。所以tolower(str[i])str[i] 提升为int 并返回另一个intstd::cout 尽职尽责地打印为int。请参阅这些页面,了解使用这些功能时需要注意的其他一些陷阱。
  • if (sizeof(str)&gt;maxsize) std::string 有一个 size() 成员函数,它给出了所包含数据的长度。 sizeof(std::string) 不是一回事,与包含的数据量完全无关。您应该在 for 循环中使用 &lt;,而不是 &lt;=
  • 改用static_cast&lt;char&gt;(toupper(str[i]))

标签: c++ string


【解决方案1】:

首先我在toggle 函数中添加了一个return第二,您可以使用size() 成员函数找出std::string 的长度/大小。使用这两个修改,您的程序将如下所示:

#include <iostream>
#include <string.h>
 #define maxsize 100
std::string toggle(std::string str)
{
   
    if ( str.size() > maxsize)
    {
        std::cout << "Size of string is too big!" << std::endl;
        
    }
    else
    {
        for (int i = 0 ; i < str.size() ; i++) //note here i have removed <= and instead used <
        {
            if (isupper(str.at(i)))
            {
                str.at(i) = tolower(str.at(i));
                std::cout << "UPPER CASE CONVERTED TO LOWER CASE "<< str.at(i) <<" " << std::endl;
                
            }
            else
            {
                str.at(i) = toupper(str.at(i));
                std::cout << "LOWER CASE CONVERTED TO UPPER CASE "<< str.at(i) <<" " << std::endl;
            }

        }
        
    }
    return str; //added this return
}


int main()
{
    toggle("Hello This Is A Test");
}

上述程序的输出为:

UPPER CASE CONVERTED TO LOWER CASE h 
LOWER CASE CONVERTED TO UPPER CASE E 
LOWER CASE CONVERTED TO UPPER CASE L 
LOWER CASE CONVERTED TO UPPER CASE L 
LOWER CASE CONVERTED TO UPPER CASE O 
LOWER CASE CONVERTED TO UPPER CASE   
UPPER CASE CONVERTED TO LOWER CASE t 
LOWER CASE CONVERTED TO UPPER CASE H 
LOWER CASE CONVERTED TO UPPER CASE I 
LOWER CASE CONVERTED TO UPPER CASE S 
LOWER CASE CONVERTED TO UPPER CASE   
UPPER CASE CONVERTED TO LOWER CASE i 
LOWER CASE CONVERTED TO UPPER CASE S 
LOWER CASE CONVERTED TO UPPER CASE   
UPPER CASE CONVERTED TO LOWER CASE a 
LOWER CASE CONVERTED TO UPPER CASE   
UPPER CASE CONVERTED TO LOWER CASE t 
LOWER CASE CONVERTED TO UPPER CASE E 
LOWER CASE CONVERTED TO UPPER CASE S 
LOWER CASE CONVERTED TO UPPER CASE T 

可以看到here

【讨论】:

    猜你喜欢
    • 2013-01-08
    • 2020-09-01
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多