您的位置:首页 > 其它

华为在线训练(6)

2016-08-11 22:15 190 查看
一、编程查找两个字符串的最大公共子串

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
char *commonstring(char *str1,char *str2)
{
int i,j;
char *shortstr,*longstr;
char *substr;
if(str1==NULL||str2==NULL)//判断str1与str2的有效性
{
return NULL;
}
if(strlen(str1)<=strlen(str2))//<span style="font-family: Arial, Helvetica, sans-serif;">shortstr和longstr分别指向较短和较长的字符串</span>
{
shortstr=str1;
longstr=str2;
}
else
{
shortstr=str2;
longstr=str1;
}
if(strstr(longstr,shortstr)!=NULL)//strstr()函数功能用于判断shortstr是否为longstr的子串
{
return shortstr;//如果是,返回短字符串
}
substr=(char *)malloc(sizeof(char)*(strlen(shortstr)+1));
for(i=strlen(shortstr)-1;i>0;i--)
{
for(j=0;j<=strlen(shortstr)-i;j++)
{
memcpy(substr,&shortstr[j],i);//将字符串的一部分复制到substr
substr[i]='\0';               //其长度逐渐减小
if(strstr(longstr,substr)!=NULL)//如果在longstr中能找到substr,则返回substr
return substr;
}
}
return NULL;
}

int main()
{
char *str1=(char *)malloc(256);
char *str2=(char *)malloc(256);
char *common=NULL;
while(cin>>str1>>str2)
{
common=commonstring(str1,str2);
if(common!=NULL)
{
cout<<common<<endl;
}
else
cout<<"字符为空"<<endl;
}
return 0;
}
二、查找和排序

题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩

      都按先录入排列在前的规则处理。

   例示:

   jack      70

   peter     96

   Tom       70

   smith     67

   从高到低  成绩    flag=0        

   peter     96    

   jack      70    

   Tom       70    

   smith     67    

   从低到高          flag=1

   smith     67  

   Tom       70    

   jack      70    

   peter     96  

说明:

1、sort与stable_sort的区别。

使用stable_sort可以保证相等元素的原本相对次序在排序后保持不变,而sort不能保证

2、自定义比较函数

在没有指明排序的规则是,系统默认a<b返回为真,即默认从小到大排序。在自定义比较函数

bool comp(const int &a,const int &b)//注意:这里传递的是引用

{

    return a>b;

}

会进行从大到小排序。

#include<stdio.h>
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
bool Compare_up(const pair<string, int>& a, const pair<string, int>& b) //少了const 会报错
{
return a.second > b.second;
}
bool Compare_down(const pair<string, int>& a, const pair<string, int>& b)
{
return a.second < b.second;
}
int main()
{
int num, compare_mode, score,i;
string name;
while(cin>>num>>compare_mode)
{
vector< pair<string,int> >str_int; //vc6.0中>>之间要有空格
for(i=0;i<num;i++)
{
cin>>name>>score;
str_int.push_back(make_pair(name,score));
}
if(compare_mode==0)
stable_sort(str_int.begin(),str_int.end(),Compare_up);
else
stable_sort(str_int.begin(),str_int.end(),Compare_down);
/*vector< pair<string,int> >::iterator vi;
for(vi=str_int.begin();vi!=str_int.end();vi++)
cout<<(*vi).first<<" "<<(*vi).second<<endl;*/
for(i=0;i<num;i++)
cout<&l
4000
t;str_int[i].first<<" "<<str_int[i].second<<endl;

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: