问题简述:
输入一个正整数N,再输入N行,每行包含一个字母(‘A’-‘Z’),将这些字母按顺序构成一个字符串S。按照以下规则取字符,顺序构成一个新的字符串T,T是按照字典顺序最小的。
1.从S的头取一个字符并且删除该字符,连接到T中(开始时T为空串);
2.从S的尾取一个字符并且删除该字符,连接到T中。
问题分析:
这是一个用字符串构建另一个字符串的问题,可以先将输入的字符串倒置成为
另一个字符串,然后,通过比较两个字符串的首字符大小构建问题所需要的字
符串,当字符相同时,通过比较下一位字符串的大小来取值。
错点:
1.80换行通过设置某个参数计数,到达80换行即可,不需要另外的参数进行循环
2.当两个字符相等时是比较下一个字符的大小,然后进行输出的。该过程可以设置一个死循环来完成。
#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
int main()
{
int n;
cin >> n;
string a;
string b;
char s;
for(int i=0;i<n;++i)
{
cin >> s;
a = a + s;
}
for (int i = 0; i < n; ++i)
{
b+= a[n - i - 1];
}
string t;
int i = 0, j = 0;
int x = 0;
for(int z=0;z<n;z++)
{
int l = 1;
if (a[i] < b[j])
{
cout<< a[i];
i++;
}
else if(a[i]>b[j])
{
cout<< b[j];
j++;
}
else
{
while (1)
{
if (a[i + l] < b[j + l])
{
cout << a[i];
i++;
break;
}
else if (a[i + l] > b[j + l])
{
cout << b[j];
j++;
break;
}
else
{
++l;
}
}
}
if (++x == 80)
{
x = 0;
cout << endl;
}
}
return 0;
}