01:字符串插入
总时间限制:
1000ms
内存限制:
65536kB
描述
有两个字符串str和substr,str的字符个数不超过10,substr的字符个数为3。(字符个数不包括字符串结尾处的’\0’。)将substr插入到str中ASCII码最大的那个字符后面,若有多个最大则只考虑第一个。
输入
输入包括若干行,每一行为一组测试数据,格式为
str substr
输出
对于每一组测试数据,输出插入之后的字符串。
样例输入
abcab eee
12343 555
样例输出
abceeeab
12345553
初始代码如下:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
typedef struct
{
char str[20];
int length;
}SqList;
int Locate(const SqList &L)
{
int s;
char max;
max=L.str[0];
for(int i = 1 ; i < L.length ; i++)
{
if(L.str[i] > max)
{
max = L.str[i];
s = i + 1;
}
}
if(s == 0) s = 1;
return s;
}
bool AddList(SqList &L,int i,string substr)
{
int t = 0;
if(i < 1 || i > L.length + 1)
return false;
for(int k = L.length ; k >= i-1 ; k--)
L.str[k+3] = L.str[k];
for(int j = i ; t < 3 ; j++)
{
L.str[j] = substr [t];
t++;
}
L.length += 3;
return true;
}
void DispList(const SqList &L)
{
for(int i = 0 ; i < L.length ; i++)
cout<<L.str[i];
}
char substr[3];
int main()
{
SqList L;
int j = 0,m,n;
while(cin>>L.str>>substr)
{
L.length=strlen(L.str);
m = Locate(L);
AddList(L,m,substr);
DispList(L);
cout<<endl;
}
return 0;
}
提交了很多次也无法通过,测试了几十组数据都没问题,最后发现是Locate函数体中定位用的变量s未初始化。
修改后代码如下:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
typedef struct
{
char str[20];
int length;
}SqList;
int Locate(const SqList &L)
{
int s = 0;
char max;
max=L.str[0];
for(int i = 1 ; i < L.length ; i++)
{
if(L.str[i] > max)
{
max = L.str[i];
s = i + 1;
}
}
if(s == 0) s = 1;
return s;
}
bool AddList(SqList &L,int i,string substr)
{
int t = 0;
if(i < 1 || i > L.length + 1)
return false;
for(int k = L.length ; k >= i-1 ; k--)
L.str[k+3] = L.str[k];
for(int j = i ; t < 3 ; j++)
{
L.str[j] = substr [t];
t++;
}
L.length += 3;
return true;
}
void DispList(const SqList &L)
{
for(int i = 0 ; i < L.length ; i++)
cout<<L.str[i];
}
char substr[3];
int main()
{
SqList L;
int j = 0,m,n;
while(cin>>L.str>>substr)
{
L.length=strlen(L.str);
m = Locate(L);
AddList(L,m,substr);
DispList(L);
cout<<endl;
}
return 0;
}
如此,提交通过。