【发布时间】:2019-08-10 12:14:15
【问题描述】:
我想在不使用 STL 的情况下用 C++ 为 tolower() 编写一个函数。 当我输入像“Hello”这样的小输入时,我的代码得到了正确的输出,但是当我输入带有标点符号的大段落时,我得到了错误。任何人都可以帮助解决并帮助理解我为什么会出错吗?
我的代码:
#include <iostream>
using namespace std;
int main()
{
std::string str[] = ""Mymommaalwayssaid,\"Lifewaslikeaboxofchocolates.Youneverknowwhatyou'regonnaget.""
int n ,i;
string UP[str.size()];
for(int i=0;i<=str.size();i++)
{
if(int(str[i])<=90 && int(str[i])>=65)
{ n = int(str[i]);
n= n+32;
UP[i]=char(n);
}
else
UP[i] = str[i];
}
cout<<UP<<endl;
return 0;
}
【问题讨论】:
-
创建
std::string数组的语法不对。你的代码编译了吗? -
string UP[str.size()];不应该工作 A. 因为str是一个不能调用成员函数的数组和 B. 因为 C++ 中数组的大小必须在编译时知道-时间。 -
string UP[str.size()];-- 这不是有效的 C++。另外——我想为 tolower() 编写一个函数——tolower函数所做的远不止假设所使用的语言是英语并且整理序列是 ASCII,因为你的尝试是做。 -
首先,不要使用幻数。
str[i] <= ‘z’比str[i] <= 90清晰得多。另外,请注意,并非所有世界都是 ASCII。在某些字符编码中,字母之间混有非字母。标准库提供了tolower,这样您就不必自己动手了。 -
您想要多便携?当然,在大多数字符集中,小写字母和大写字母都是连续的范围——但情况并非总是...除了与数字 (90, 65) 进行比较之外,您可以与字符文字(
'Z'、'A')进行比较,它们共享相同的值,但使用起来更安全。同样:n += 'a' - 'A'得到适当的差异。