字符串插入顺序表解法

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;
}

如此,提交通过。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值