首页 > 解决方案 > 如何使这个大写小写 C++ 程序工作?

问题描述

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

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

我写的代码:

#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

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

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

标签: c++string

解决方案


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

#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 

可以在这里看到。


推荐阅读