-2

我没有得到 str2 的任何输出。为什么?

#include <iostream>

using namespace std;

int main() {   
    string str1,str2;
    int t_cases,i,j,length;

    cin>>t_cases;

    for (i=0;i<t_cases;i++)
    {
        cin>>str1;
        length=str1.length();

        for (j=0;j<length;j++)
            str2[j]=str1[length-1-j];

        cout<<str2<<endl;;
    }
    return 0;
}
4

3 回答 3

8

str2是空的,买你访问它,就好像它在这里有非零大小:

str2[j]=str1[length-1-j];

这是未定义的行为

您可以从一开始就初始化str2为正确的大小(在第一个循环内):

for (i=0;i<t_cases;i++)
{
    cin>>str1;
    length=str1.length();
    std::string str2(length, ' '); // string with t_cases spaces

或默认构造它,并按照@saviourself 的建议附加到它(也在第一个循环内):

for (i=0;i<t_cases;i++)
{
    cin>>str1;
    length=str1.length();
    std::string str2
    for (j=0;j<length;j++)
        str2 += str1[length-1-j];
于 2013-07-02T12:23:37.973 回答
3

str2 为空,添加即可

 str2.resize(length);

它应该工作

因为你正在做的是不安全的:

如果 pos 不大于字符串长度,则函数从不抛出异常(不抛出保证)。否则,它会导致未定义的行为。

于 2013-07-02T12:25:55.040 回答
1

您正在调用未定义的行为。str2 的长度为 0,您正在尝试在结束后写入数据。如果你使用str.at(j)它会中止。

调整 str2 的大小或附加新值。

于 2013-07-02T12:28:24.500 回答