唔,这道题…还是比较简单的=_____=
遍历第一个字符串找出最大值,将第二个串插进去,把后面的补齐,好啦!
具体算法看AC代码吧…好久没写代码了比较丑……
/*
ID: Moien_Podiene
PROG: STRING
LANG: C++
*/
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
int i, j;
int maxascii, maxloc, buflen;
int len_str, len_substr;
char str[32], substr[16];
char str_buf[32];
while(cin >> str >> substr)
{
maxascii = 0;
buflen = 0;
len_str = strlen(str);
len_substr = strlen(substr);
for(i = 0; i < len_str; i++)
{
if(str[i] > maxascii)
{
maxascii = str[i];
maxloc = i;
}
}
for(i = maxloc + 1; i <= len_str; i++)
{
str_buf[i - maxloc - 1] = str[i];
buflen++;
}
for(i = maxloc + 1; i < maxloc + len_substr + 1; i++)
{
str[i] = substr[i - maxloc - 1];
}
for(i = maxloc + len_substr + 1; i < maxloc + len_substr + 1 + buflen; i++)
{
str[i] = str_buf[i - maxloc - len_substr - 1];
}
str[maxloc + len_substr + 1 + buflen] = 0;
cout << str << endl;
}
}
郑脑斯告诉了我一个机智的方法…只用找出ASCII最大值,然后输出之前的,再输出插入的串,再输出后面的就行了……
代码如下:
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
int i, j;
int maxascii, maxloc;
int len_str, len_substr;
char str[32], substr[16];
char str_buf[32];
while(cin >> str >> substr)
{
maxascii = 0;
len_str = strlen(str);
len_substr = strlen(substr);
for(i = 0; i < len_str; i++)
{
if(str[i] > maxascii)
{
maxascii = str[i];
maxloc = i;
}
}
for(i = 0; i <= maxloc; i++)
{
cout << str[i];
}
for(i = 0; i < len_substr; i++)
{
cout << substr[i];
}
for(i = maxloc + 1; i < len_str; i++)
{
cout << str[i];
}
cout << endl;
}
}
两种方法数据对比如下:
嗯…代码短了一点……
最后,惯例君又来了…原题如下:
描述
有两个字符串str和substr,str的字符个数不超过10,substr的字符个数为3。(字符个数不包括字符串结尾处的'\0'。)将substr插入到str中ASCII码最大的那个字符后面,若有多个最大则只考虑第一个。
输入
输入包括若干行,每一行为一组测试数据,格式为
str substr
输出
对于每一组测试数据,输出插入之后的字符串。
样例输入
abcab eee
12343 555
样例输出
abceeeab
12345553