我正在尝试从命令行获取输入,然后将其转换为小写。为此,我写了:
istream& operator>>(istream& is, Card& c)
{
static map<string,Card::Rank> mr = createmr();
static map<string,Card::Suit> ms = createms();
string srank, c1, ssuit;
if (is >> srank >> c1 >> ssuit)
{
if (c1 == "of")
{
string nsrank;
string nssuit;
for(unsigned int i = 0; i < srank.length(); i++) {
char temp = srank[i];
nsrank[i] = tolower(srank[i]);
}
它在 for 循环的第二次迭代中失败(更准确地说,它在 上失败nsrank[i] = tolower(srank[i]);
)。显示的错误是“字符串子字符串超出范围”,但我不明白这是怎么回事,因为字符串中肯定还有字符。
举个例子:如果我输入“黑桃A”,那么它将第一次迭代(当i = 0时)并转移'a'罚款。但是,它然后返回 i 等于 1(它应该指代“c”),而是告诉我子字符串超出范围(即使分配给char temp
工作正常)。在调试期间,“nsrank”声称大小为 15,所以我看不出它怎么可能超出范围......