所以基本上我有一个名为QandA [2] [55]的字符串数组。

QandA[0][0-55]包含问题(范围为0-55)

QandA[1][0-55]包含以下问题的答案

现在,我必须进行循环,以将所有字符串从QandA[1][1-55]传输到QandA[2][1-55]的顺序相同,但要小写。我已经尝试过此代码,但似乎无法正常工作。我还通过使用循环从0-55引出所有字符串来检查字符串数组是否正常工作。我的错误代码如下所示。

for (int i = 0; i < 55; i++) {
    QandA[2][i] = tolower(QandA[1][i]);
}


这给我一个错误,说“不存在从std :: string到int的适当转换”,这是我不明白的,因为我认为tolower是针对字符串值,而不是int。

最佳答案

尽管您的代码可能还会有其他问题(例如,在QandA的第一个维度中的越界访问),但是您在这里看到的问题是std::tolower应该采用单个字符:

char lowerChar = std::tolower('C');


如果要使整个字符串小写,则需要按字符串中的每个字符进行操作。有很多方法可以做到这一点,例如。 How to convert std::string to lower case?

从这个答案中,您的代码为:

for (int i = 0; i < 55; i++)
{
    QandA[2][i] = std::transform(QandA[1][i].begin(),
                                 QandA[1][i].end(),
                                 QandA[1][i].begin(),
                                 ::tolower);
}


还请记住,要完成此操作,QandA的声明必须为:

std::string QandA[3][55];


虽然如果可以使用c++11,请首选:

std::array<std::array<std::string, 55>, 3> QandA;


以获得更多功能和更好的一切。

08-17 04:48