错误在哪里 求解答
#include <iostream>#include <cstring>
#include <cstdlib>
using namespace std;
void swap()
{
string str;
int a[50],b=0;
getline(cin,str);
int leng=str.length();
for(int j = 0; j < leng; j++)
{
if(str[j] == ' ')
{
b++;
a[b] = j;
}
}
a[0] = -1;
string str1[b+1];
int record[b+1];
for(int k = 0; k < b; k++)
{
int n = 0;
for(int j = a[k]+1;j < a[k+1]; j++)
{
str1[k][n] = str[j];
record[k+1] = n;
n++;
}
}
int m = 0;
for(int j = a[b]+1; j < leng; j++)
{
str1[b][m] = str[j];
record[b+1] = m;
m++;
}
record[0] = 0;
for(int j = 0; j < b+1; j++)
{
for(int k = record[j+1]; k >= 0; k--)
{
cout << str1[j][k];
}
cout << " ";
}
cout << endl;
}
int main()
{
int times,leng;
cin >> times;
cin.get();
for(int i = 0; i < times; i++)
{
swap();
}
return 0;
}
这个是错的,我后来换了种思路做了如下。
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
void swap()
{
string str;
int a[50],b=0;
getline(cin,str);
int leng=str.length();
for(int j = 0; j < leng; j++)
{
if(str[j] == ' ')
{
b++;
a[b] = j;
}
}
a[0] = -1;
a[b+1] = leng;
string st[b+1];
char c;
for(int j = 0; j < b+1; j++)
{
if(j == b)
{
st[j] = str.substr(a[j]+1,a[j+1]-a[j]-1);
}
if(j != b)
{
st[j] = str.substr(a[j]+1,a[j+1]-a[j]-1);
}
}
for(int j = 0; j < b+1; j++)
{
for(int k = 0; k < (a[j]+1,a[j+1]-a[j])/2; k++){
c = st[j][k];
st[j][k]= st[j][a[j]+1,a[j+1]-a[j]-2-k];
st[j][a[j]+1,a[j+1]-a[j]-2-k] = c;
}
if(j == b)
cout << st[j]<<endl;
if(j != b)
cout << st[j] << " " ;
}
}
int main()
{
int times,leng;
cin >> times;
cin.get();
for(int i = 0; i < times; i++)
{
swap();
}
return 0;
}
我想知道为什么第一种方案 运行一次会运行不下去。