【发布时间】: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 100C++ 不是 C。使用const而不是预处理器宏。一般来说,在 C++ 中,一般避免使用#define。 -
"为什么显示整数而不是字符串?" - 它打印
str中每个char的数值,因为这就是您的for循环和str[i]将执行的操作。 -
if (sizeof(str)>maxsize)std::string有一个size()成员函数,它给出了所包含数据的长度。sizeof(std::string)不是一回事,与包含的数据量完全无关。您应该在 for 循环中使用<,而不是<=。 -
改用
static_cast<char>(toupper(str[i]))