我没有获得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;
}
答案 0 :(得分: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];
答案 1 :(得分:3)
str2为空,只需添加
str2.resize(length);
它应该工作
因为你在做什么是不安全的:
如果pos不大于字符串长度,则函数永远不会 抛出异常(无抛出保证)。否则,它会导致未定义 行为。
答案 2 :(得分:1)
您正在调用未定义的行为。 str2长度为0,您尝试在结束后写入数据。如果您使用str.at(j)
,它将中止。
调整str2的大小或附加新值。