还是搞成合集好点,所以实验二有两道题也发这了。
之前还可以看题目时没想到发到这,想起来时已经看不了题目了qwq,所以题目是从别人那拷过来的。
题目
输入三个字符串,通过指针读取各个字符串的子串(子串是指字符串中连续的一小部分),把它们合并成一个新字符串
要求:
三个字符串的创建和输入可以使用数组,也可以不用
输入后,根据三个字符串的子串的长度,计算出新字符串的长度
使用动态数组的方法创建新的字符串,并且使用指针读取三个字符串的不同部分,并且复制到新字符串中,要求整个过程都不能使用数组下标
使用指针输出新的字符串
输入
第一行输入t表示有t个测试实例
连续三行输入三个字符串,每个字符串都包含10个字符
连续三行,每行输入数字a和b,表示每个子串的开始和结束位置。注意字符串的位置是按照一般意义从1开始计算,和编程中的数组位置不同。例如字符串abcdefg,开始位置是3,结束位置是5,那么子串就是cde
依次输入t个实例
输出
每行输出合并后的新字符串
输入样例1
2
abcdefghij
ABCDEFGHIJ
aabbccddee
3 5
2 6
8 10
AABBCCDDEE
ffgghhiijj
FFGGHHIIJJ
1 4
5 8
2 7
输出样例1
cdeBCDEFdee
AABBhhiiFGGHHI
#include <iostream>
using namespace std;
#include <string.h>
int main()
{
int t;
cin >> t;
while (t--)
{
char c1[11], c2[11], c3[11];
int a, b, c, d, e, f;
cin >> c1 >> c2 >> c3;
cin >> a >> b >> c >> d >> e >> f;
int n = 4 + b - a + d - c + f - e;
char *r = new char[n];
char *p1, *p2, *p3;
p1 = c1 + a - 1;
p2 = c2 + c - 1;
p3 = c3 + e - 1;
for (int i = 0; i < b - a + 1; i++)
*r++ = *(p1+i);
for (int i = 0; i < d - c + 1; i++)
*r++ = *(p2+i);
for (int i = 0; i < f - e + 1; i++)
*r++ =*(p3+i);
for(int i=0;i<strlen(r);r++)
cout <<*(r+i);
cout<<endl;
}
}
题目描述
定义并实现三个函数:
第一个函数是整数函数,返回类型为整数,参数是一个整数变量,操作是求该变量的平方值
第二个函数是浮点数函数,返回类型为浮点数,参数是一个浮点数变量,操作是求该变量的平方根值。求平方根可以使用函数sqrt(浮点参数),将返回该参数的平方根,在VC中需要头文件cmath。
第三个函数是字符串函数,无返回值,参数是一个字符串指针,操作是把这个字符串内所有小写字母变成大写。
要求:定义三个函数指针分别指向这三个函数,然后根据调用类型使用函数指针来调用这三个函数。不能直接调用这三个函数。
如果类型为I,则通过指针调用整数函数;如果类型为F,则通过指针调用浮点数函数;如果类型为S,则通过指针调用字符串函数
输入
第一行输入一个t表示有t个测试实例
每行先输入一个大写字母,表示调用类型,然后再输入相应的参数
依次输入t行
输出
每行输出调用函数后的结果
输入样例1
5
S shenzhen
I 25
F 6.25
I 31
S China
输出样例1
SHENZHEN
625
2.5
961
CHINA
#include <iostream>
using namespace std;
#include<cmath>
#include<string.h>
int zhen(int a);
float fu(float a);
void zifu(char *a);
int main(){
int t;
cin>>t;
while(t--){
char type;
cin>>type;
getchar();
if(type=='S'){
char c[30];
cin>>c;
void (*p)(char *p)=zifu;
p(c);
}
else if(type=='F'){
float a;
cin>>a;
float (*p)(float)=fu;
p(a);
}
else if(type=='I'){
int a;
cin>>a;
int (*p)(int)=zhen;
p(a);
}
}
}
int zhen(int a){
int sum=a*a;
cout<<sum<<endl;
}
void zifu(char *a){
for(int i=0;i<strlen(a);i++)
if(*(a+i)<='z'&&*(a+i)>='a') *(a+i)-=32;
for(int i=0;i<strlen(a);i++)
cout<<*(a+i);
cout<<endl;
}
float fu(float a){
float b=sqrt(a);
cout<<b<<endl;
}
1-求最大值最小值
#include <iostream>
using namespace std;
void find(int *num, int n, int &minIndex, int &maxIndex);
int main()
{
int t;
cin >> t;
while (t--)
{
int n, minIndex, maxIndex;
cin >> n;
int *num = new int[n];
for (int i = 0; i < n; i++)
cin >> num[i];
find(num, n, minIndex, maxIndex);
cout << "min=" << num[minIndex] << " "
<< "minindex=" << minIndex << endl;
cout << "max=" << num[maxIndex] << " "
<< "maxindex=" << maxIndex << endl;
cout << endl;
delete[] num;
}
}
void find(int *num, int n, int &minIndex, int &maxIndex)
{
int max = *num, min = *num;
maxIndex = 0, minIndex = 0;
for (int i = 0; i < n; i++)
{
if (num[i] > max)
{
max = num[i];
maxIndex = i;
}
if (num[i] < min)
{
min = num[i];
minIndex = i;
}
}
}
2、小票输入输出
#include <iostream>
using namespace std;
struct xiaopiao
{
char name[20];
char Terminal[6];
char caozuoyuan[3];
char Card_Issuers[4];
char Validity[10];
char CardNumber[20];
char Traded[20];
char Costs[10];
};
int main()
{
int t;
cin >> t;
void print(xiaopiao);
xiaopiao xp;
while (t--)
{
cin >> xp.name;
cin >> xp.Terminal;
cin >> xp.caozuoyuan;
cin >> xp.Card_Issuers;
cin >> xp.Validity;
cin >> xp.CardNumber;
cin >> xp.Traded;
cin >> xp.Costs;
for(int i=4;i<12;i++)
xp.CardNumber[i]='*';
print(xp);
}
}
void print(xiaopiao xp){
cout<<"Name: "<<xp.name<<endl;
cout<<"Terminal: "<<xp.Terminal<<" operator: "<<xp.caozuoyuan<<endl;
cout<<"Card Issuers: "<<xp.Card_Issuers<<" Validity: "<<xp.Validity<<endl;
cout<<"CardNumber: "<<xp.CardNumber<<endl;
cout<<"Traded: "<<xp.Traded<<endl;
cout<<"Costs: $"<<xp.Costs<<endl;
cout<<endl;
}
3、三数论大小
#include <iostream>
using namespace std;
void daxiao(int &a, int &b, int &c);
int main()
{
int t;
cin >> t;
while (t--)
{
int a, b, c;
cin >> a >> b >> c;
daxiao(a, b, c);
cout << a << " " << b << " " << c << endl;
}
}
void daxiao(int &a, int &b, int &c)
{
int n;
if (a < b)
{
n = a;
a = b;
b = n;
}
if (a < c)
{
n = a;
a = c;
c = n;
}
if (b < c)
{
n = b;
b = c;
c = n;
}
}
4、谁是老二
#include <iostream>
#include <algorithm>
using namespace std;
struct birthday
{
int year;
int month;
int day;
};
bool complare(birthday& a,birthday& b)
{
int bir1 = a.year * 10000 + a.month * 100 + a.day;
int bir2 = b.year * 10000 + b.month * 100 + b.day;
return bir1 < bir2;
}
int main()
{
int t;
cin >> t;
birthday bir[t];
for (int i = 0; i < t; i++)
{
cin >> bir[i].year >> bir[i].month >> bir[i].day;
}
for(int i=0;i<t-1;i++)
sort(bir,bir+t,complare);
cout << bir[1].year << "-" << bir[1].month << "-" << bir[1].day << endl;
}
5、扑克牌排序
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
struct poker
{
char colour[100];
int size1;
int size2;
};
bool cmplare(poker a, poker b)
{
if (a.size1 == b.size1)
return a.size2 < b.size2;
else
return a.size1 < b.size1;
}
void compare(poker *pok)
{
if (strstr(pok->colour, "大王"))
pok->size1 = 6;
else if (strstr(pok->colour, "小王"))
pok->size1 = 5;
else if (strstr(pok->colour, "黑桃"))
pok->size1 = 4;
else if (strstr(pok->colour, "红桃"))
pok->size1 = 3;
else if (strstr(pok->colour, "梅花"))
pok->size1 = 2;
else if (strstr(pok->colour, "方块"))
pok->size1 = 1;
if (strstr(pok->colour, "2"))
pok->size2 = 2;
else if (strstr(pok->colour, "3"))
pok->size2 = 3;
else if (strstr(pok->colour, "4"))
pok->size2 = 4;
else if (strstr(pok->colour, "5"))
pok->size2 = 5;
else if (strstr(pok->colour, "6"))
pok->size2 = 6;
else if (strstr(pok->colour, "7"))
pok->size2 = 7;
else if (strstr(pok->colour, "8"))
pok->size2 = 8;
else if (strstr(pok->colour, "9"))
pok->size2 = 9;
else if (strstr(pok->colour, "10"))
pok->size2 = 10;
else if (strstr(pok->colour, "J"))
pok->size2 = 11;
else if (strstr(pok->colour, "Q"))
pok->size2 = 12;
else if (strstr(pok->colour, "K"))
pok->size2 = 13;
else if (strstr(pok->colour, "A"))
pok->size2 = 14;
}
int main()
{
int t;
cin >> t;
while (t--)
{
int n;
cin >> n;
poker pok[n];
for (int i = 0; i < n; i++)
{
cin >> pok[i].colour;
compare(&pok[i]);
}
sort(pok, pok + n, cmplare);
for (int i = n - 1; i >= 0; i--)
{
if (i == 0)
cout << pok[i].colour;
if (i != 0)
cout << pok[i].colour << " ";
}
cout << endl;
}
}
6、抄袭查找
#include <bits/stdc++.h>
using namespace std;
struct test_paper
{
int number;
char answer_1[20];
char answer_2[20];
char answer_3[20];
};
bool judge(char *&pA, char *&pB)
{
int flag = 0, len = 0;
while (*pA != '\0' && *pB != '\0')
{
if (*pA == *pB)
flag++;
pA++, pB++, len++;
}
return flag >= 0.9 * len;
}
int compare(test_paper *A, test_paper *B)
{
char *pA = A->answer_1, *pB = B->answer_1;
if (judge(pA, pB))
return 1;
pA = A->answer_2;
pB = B->answer_2;
if (judge(pA, pB))
return 2;
pA = A->answer_3;
pB = B->answer_3;
if (judge(pA, pB))
return 3;
return 0;
}
int main()
{
int n;
cin >> n;
test_paper a[n];
for (int i = 0; i < n; i++)
cin >> a[i].number >> a[i].answer_1 >> a[i].answer_2 >> a[i].answer_3;
for (int i = 0; i < n - 1; i++)
{
for (int j = i + 1; j < n; j++)
{
int res = compare(a + i, a + j);
if (res != 0)
cout << a[i].number << " " << a[j].number << " " << res << endl;
}
}
}
//老师的代码
第一种做法:数组、指针交替
#include<iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
main()
{ //freopen("d:\\a.txt", "r", stdin);
int t,b[3],e[3],i,j,n=0; //数组b,e分别记录每个字符串的起止位置
cin>>t;
char p[3][15],*q,*s,*r;
while(t--){
for(i=0;i<3;i++)
cin>>p[i];
for(i=0;i<3;i++){
cin>>b[i]>>e[i];
n+=e[i]-b[i]+1; //n记录合并后的大小
}
r=new char[++n]; //多出一个放结束符
s=r;
for(i=0;i<3;i++){
q=*(p+i); //等价于:q=p[i];
for(j=b[i]-1;j<e[i];j++)
*s++=*(q+j);
}
*s='\0';
cout<<r<<endl;
delete[] r;
}
return 0;
}
///
第二种做法:纯指针
#include<bits/stdc++.h>
using namespace std;
int main()
{ //freopen("d:\\a.txt","r",stdin);
int t;
cin>>t;
while(t--){
char **p=new char*[3], *s=new char[40], *q=s;
int a,b;
for(int i=0;i<3;i++){ //输入3个字符串
p[i]=new char[15];
cin>>p[i];
}
for(int i=0;i<3;i++){ //将每个字符串的部分内容,拷贝到s上去,注意q声明时有q=s
cin>>a>>b;
for(int j=a-1;j<b;j++)
*q++=*(*(p+i)+j); //等价于:*q++=*(p[i]+j);或*q++=p[i][j];
}
*q=0; //处理结束后,加结束符0
cout<<s<<endl; //输出s的值
for(int i=0;i<3;i++) //释放空间
delete[] p[i];
delete[] p;
}
return 0;
}
===================================================================
#include<stdio.h>
#include<cmath>
#include<iostream>
using namespace std;
int ifunc(int);
float ffunc(float);
void sfunc(char*);
int main()
{ //freopen("d:\\a.txt","r",stdin);
int (*p1)(int)=ifunc;
float (*p2)(float)=ffunc;
void (*p3)(char*)=sfunc;
int t;
cin>>t;
while(t--){
char ch;
cin>>ch;
switch(ch){
case 'I':int i;
cin>>i;
cout<<p1(i)<<endl;
break;
case 'F':float f;
cin>>f;
cout<<p2(f)<<endl;
break;
case 'S':char s[20];
cin>>s;
p3(s);
cout<<s<<endl;
break;
}
}
return 0;
}
int ifunc(int x)
{
return x*x;
}
float ffunc(float x){
return sqrt(x);
}
void sfunc(char* s){
char* p=s;
while(*p){
if(islower(*p))
*p=toupper(*p);
p++;
}
}
==============================================================
#include<iostream>
using namespace std;
void find(int *num,int n,int &minindex,int &maxindex);
int main()
{
int t,n,minindex,maxindex;
cin>>t;
int *p;
while(t--)
{
cin>>n;
p=new int[n];
for(int i=0;i<n;i++)
cin>>p[i];
minindex=0;
maxindex=0;
find(p,n,minindex,maxindex);
cout<<"min="<<p[minindex]<<" minindex="<<minindex<<endl;
cout<<"max="<<p[maxindex]<<" maxindex="<<maxindex<<endl;
cout<<endl;
delete[] p;
}
return 0;
}
void find(int *num,int n,int &minindex,int &maxindex){
for(int i=1;i<n;i++){
if(num[i]>num[maxindex])
maxindex=i;
if(num[i]<num[minindex])
minindex=i;
}
}
========================================
//第一种,用string保存数据
#include<iostream>
#include<string>
using namespace std;
struct Message{
string name,te,op,card,va,cn,tr,co;
};
int main()
{
int t;
cin>>t;
Message date;
while(t--)
{
cin>>date.name >>date.te >>date.op>>date.card>>date.va >>date.cn>>date.tr>>date.co ;
int n=(date.cn).length();
string s(n-8,'*'); (date.cn).replace(4,n-8,s);
//或者 (date.cn).erase(4,n-8);(date.cn).insert(4,n-8,'*');
cout<<"Name: "<<date.name<<endl;
cout<<"Terminal: "<<date.te<<' '<<"operator: "<<date.op<<endl;cout<<"Card Issuers: "<<date.card<<' '<<"Validity: "<<date.va<<endl;
cout<<"CardNumber: "<<date.cn<<endl;
cout<<"Traded: "<<date.tr<<endl;cout<<"Costs: $"<<date.co<<endl;
cout<<endl;
}
return 0;
}
///
//第二种,用字符数组保存数据
#include<iostream>
#include<cstring>
using namespace std;
struct Message{
char name[20],te[10],op[10],card[10],va[10],cn[20],tr[10],co[10];
};
int main()
{
int t,i,len;
cin>>t;
Message date;
while(t--)
{
cin>>date.name >>date.te >>date.op>>date.card>>date.va >>date.cn>>date.tr>>date.co ;
len=strlen(date.cn);
for(i=0;i<len;i++){
if(i>=4 && i<len-4)
date.cn[i]='*';
}
cout<<"Name: "<<date.name<<endl;
cout<<"Terminal: "<<date.te<<' '<<"operator: "<<date.op<<endl;cout<<"Card Issuers: "<<date.card<<' '<<"Validity: "<<date.va<<endl;
cout<<"CardNumber: "<<date.cn<<endl;
cout<<"Traded: "<<date.tr<<endl;cout<<"Costs: $"<<date.co<<endl;
cout<<endl;
}
return 0;
}
======================================================
//1、调用sort排序,利用greater<int>按从大到小排序
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
void sort1(int& a,int& b,int& c);
int main()
{ //freopen("d:\\a.txt", "r", stdin);//提交时,要注释掉这行
int t,a,b,c;
cin>>t;
while(t--){
cin>>a>>b>>c;
sort1(a,b,c);
cout<<a<<" "<<b<<" "<<c<<endl;
}
}
void sort1(int& a,int& b,int& c){
int s[3]={a,b,c};
sort(s,s+3,greater<int>());
a=s[0];b=s[1];c=s[2];
}
-------------------------------------------------
//2、调用sort排序,sort默认是按从小到大排序的,最后赋值要反过来
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
void sort1(int& a,int& b,int& c);
int main()
{ //freopen("d:\\a.txt", "r", stdin);//提交时,要注释掉这行
int t,a,b,c;
cin>>t;
while(t--){
cin>>a>>b>>c;
sort1(a,b,c);
cout<<a<<" "<<b<<" "<<c<<endl;
}
}
void sort1(int& a,int& b,int& c){
int s[3]={a,b,c};
sort(s,s+3);
a=s[2];b=s[1];c=s[0]; //这里和第一种方法不一样
}
----------------------------
//3、调用sort排序,自己写一个排序函数complare,规定按从大到小的顺序排序
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
bool complare(int a,int b);
void sort1(int& a,int& b,int& c);
int main()
{ //freopen("d:\\a.txt", "r", stdin);//提交时,要注释掉这行
int t,a,b,c;
cin>>t;
while(t--){
cin>>a>>b>>c;
sort1(a,b,c);
cout<<a<<" "<<b<<" "<<c<<endl;
}
}
void sort1(int& a,int& b,int& c){
int s[3]={a,b,c};
sort(s,s+3,complare);
a=s[0];b=s[1];c=s[2];
}
bool complare(int a,int b)
{
return a>b;
}
/
//4、自己写一个排序算法,比如冒泡
#include<iostream>
#include<stdio.h>
using namespace std;
void sort1(int& a,int& b,int& c);
int main()
{ //freopen("d:\\a.txt", "r", stdin); //提交时,要注释掉这行
int t,a,b,c;
cin>>t;
while(t--){
cin>>a>>b>>c;
sort1(a,b,c);
cout<<a<<" "<<b<<" "<<c<<endl;
}
}
void sort1(int& a,int& b,int& c){
int s[3]={a,b,c};
int temp;
for(int i=0;i<2;i++)
for(int j=0;j<2-i;j++){
if(s[j]<s[j+1]){
temp=s[j];
s[j]=s[j+1];
s[j+1]=temp;
}
}
a=s[0];b=s[1];c=s[2];
}
=======================================
//第一种:用指针处理动态结构数组
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
struct birthday{
int year,month,day;
};
int cmp(const birthday &a,const birthday &b); //注意,有&符号,就要加const
int main()
{ //freopen("d:\\a.txt","r",stdin); //提交时,要注释掉本行
int t;
cin>>t;
birthday *p=new birthday[t];
for(int i=0;i<t;i++)
cin>>p[i].year>>p[i].month>>p[i].day;
sort(p,p+t,cmp);
cout<<p[1].year<<"-"<<p[1].month<<"-"<<p[1].day<<endl; //输出老二信息,在数组中下标为1
return 0;
}
int cmp(const birthday &a,const birthday &b){ //按从小到大排序
if(a.year!=b.year)
return a.year<b.year;
if(a.month!=b.month)
return a.month<b.month;
return a.day<b.day;
}
/
//第二种:用数组处理结构数组
#include <iostream>
using namespace std;
#include <algorithm>
struct Date
{
int year,month,day;
};
int cmp(Date d1,Date d2); //d1,d2前没有引用符号,Date前可以不加const
int main()
{
int t,i;
cin>>t;
Date d[t];
for(i=0;i<t;i++)
{
cin>>d[i].year>>d[i].month>>d[i].day;
}
sort(d,d+t,cmp);
cout<<d[1].year<<"-"<<d[1].month<<"-"<<d[1].day<<endl;
return 0;
}
int cmp(Date d1,Date d2)
{
if(d1.year!=d2.year)
return d1.year<d2.year;
if(d1.month!=d2.month)
return d1.month<d2.month;
return d1.day<d2.day;
}
=====================================
第一种做法:用string。这个要注意一点,不同平台汉字占用的字节数不同,要通过求一个汉字的长度来确定,而不一定是2个字节。
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct Card{
string info;
int color;
int big;
};
string color[6]={"方块","梅花","红桃","黑桃","小王","大王"};
string big[13]={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
bool cmp(const Card& c1,const Card& c2){
if(c1.color!=c2.color)
return c1.color>c2.color;
else
return c1.big>c2.big;
}
int main()
{
int t,n,i,j;
string info,s,h="黑";
int w=h.length()*2; //正确计算汉字在不同平台的字节数,花色占两个汉字,所以乘以2
cin>>t;
while(t--)
{
cin>>n;
Card *card=new Card[n];
for(i=0;i<n;i++){
cin>>info;
card[i].info=info;
s=info.substr(0,w); //获得花色
for(j=0;j<6;j++){
if(color[j]==s){
card[i].color=j;
break;
}
}
s=card[i].info.substr(w);
for(j=0;j<13;j++){
if(big[j]==s){
card[i].big=j;
break;
}
}
}
sort(card,card+n,cmp); //排序
for(j=0;j<n-1;j++)
cout<<card[j].info<<" ";
cout<<card[j].info<<endl;
delete[] card;
}
return 0;
}
///另一种写法,排序规则不同
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct Card{
string info;
int color;
int big;
};
string color[6]={"方块","梅花","红桃","黑桃","小王","大王"};
string big[13]={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
bool cmp(const Card& c1,const Card& c2){
return (c1.color*100+c1.big)>(c2.color*100+c2.big);
}
int main()
{
int t,n,i,j;
string info,s,h="黑";
int w=h.length()*2; //正确计算汉字在不同平台的字节数,花色占两个汉字,所以乘以2
cin>>t;
while(t--)
{
cin>>n;
Card *card=new Card[n];
for(i=0;i<n;i++){
cin>>info;
card[i].info=info;
s=info.substr(0,w); //获得花色
for(j=0;j<6;j++){
if(color[j]==s){
card[i].color=j;
break;
}
}
if(s=="小王") //判断大小,大王小王分别处理
card[i].big=13;
else if(s=="大王")
card[i].big=14;
else{
s=card[i].info.substr(w);
for(j=0;j<13;j++){
if(big[j]==s){
card[i].big=j;
break;
}
}
}
}
sort(card,card+n,cmp); //排序
for(j=0;j<n-1;j++)
cout<<card[j].info<<" ";
cout<<card[j].info<<endl;
delete[] card;
}
return 0;
}
第二种做法:用指针
#include<iostream>
#include<cstring>
#include<algorithm>
#include<stdio.h>
using namespace std;
struct Card{
char info[10];
int color;
int big;
};
char *color[6]={"方块","梅花","红桃","黑桃","小王","大王"};
char *big[13]={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
bool cmp(const Card& c1,const Card& c2){
return (c1.color*100+c1.big)>(c2.color*100+c2.big);
}
int main()
{
int t,n,i,j;
//freopen("d:\\a.txt", "r", stdin);//提交到后台需要注释本行
cin>>t;
while(t--)
{
cin>>n;
Card *card=new Card[n];
for(i=0;i<n;i++){
cin>>card[i].info;
for(j=0;j<6;j++){
if(strstr(card[i].info,color[j])){
card[i].color=j;
break;
}
}
if(strcmp(card[i].info,"小王")==0)
card[i].big=13;
else if(strcmp(card[i].info,"大王")==0)
card[i].big=14;
else{
for(j=0;j<13;j++){
if(strstr(card[i].info,big[j])){
card[i].big=j;
break;
}
}
}
}
sort(card,card+n,cmp);
for(j=0;j<n-1;j++)
cout<<card[j].info<<" ";
cout<<card[j].info<<endl;
delete[] card;
}
return 0;
}
***********************************************************************
//第三种做法:用数组
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct card
{
char s[10];
int type;
int num;
};
bool compCard(card c1,card c2);
void change(card& c); //返回结构体的函数
char num[][3]={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
char type[][10]={"方块","梅花","红桃","黑桃","小王","大王"};
int main()
{
card poker[54];
int t,n,i;
cin>>t;
while(t--)
{
cin>>n;
for(i=0;i<n;i++)
{
cin>>poker[i].s;
change(poker[i]);
}
sort(poker,poker+n,compCard);
for(i=0;i<n-1;i++)
cout<<poker[i].s<<" ";
cout<<poker[i].s<<endl;
}
return 0;
}
void change(card& c)
{ int j;
for(j=0;j<6;j++)
if(strstr(c.s,type[j]))
{ c.type=j;break;}
for(j=0;j<13;j++)
if(strstr(c.s,num[j]))
{ c.num=j;break;}
}
bool compCard(card c1,card c2)
{
if(c1.type!=c2.type)
return c1.type>c2.type;
return c1.num>c2.num;
}
===========================================
//
第一种:用string数组表示字符串数组
#include<stdio.h>
#include <iostream>
#include<cstring>
using namespace std;
struct paper{
int no;
string s[3];
};
int cmp(string s1,string s2) //处理1题,抄袭返回1
{ int len1=s1.length(),len2=s2.length();
int len=(len1<len2)?len1:len2;
double num=0;
for(int i=0;i<len;i++){
if(s1[i]==s2[i])
num++;
}
if(num/len>=0.89999)
return 1;
return 0;
}
int comp(paper &p1,paper &p2) //处理完整的3题
{ for(int i=0;i<3;i++){ //调用cmp3次
if(cmp(p1.s[i],p2.s[i]))
return i+1; //返回题号
}
return 0;
}
int main()
{ //freopen("d:\\a.txt", "r", stdin); //上传时,这行要注释掉
int t;
cin>>t;
paper *p=new paper[t];
for(int i=0;i<t;i++)
cin>>p[i].no>>p[i].s[0]>>p[i].s[1]>>p[i].s[2];
int n;
for(int i=0;i<t-1;i++){ //两两比较
for(int j=i+1;j<t;j++){
int n=comp(p[i],p[j]);
if(n)
cout<<p[i].no<<" "<<p[j].no<<" "<<n<<endl;
}
}
return 0;
}
/
//第二种:用指针数组表示字符串数组
#include<stdio.h>
#include <iostream>
using namespace std;
#include<cstring>
struct paper{
int no;
char *s[3];
};
int cmp(char *s1,char *s2)
{ int len1=strlen(s1),len2=strlen(s2);
int len=(len1<len2)?len1:len2;
double num=0;
for(int i=0;i<len;i++){
if(*s1++==*s2++)
num++;
}
if(num/len>=0.89999)
return 1;
return 0;
}
int comp(paper *p1,paper *p2)
{ for(int i=0;i<3;i++){
if(cmp(p1->s[i],p2->s[i]))
return i+1;
}
return 0;
}
int main()
{ //freopen("d:\\a.txt", "r", stdin); //上传时,这行要注释掉
int t;
cin>>t;
paper *p=new paper[t];
for(int i=0;i<t;i++){
for(int k=0;k<3;k++) //注意:要为指针分配空间以后才能放数据
p[i].s[k]=new char[30];
cin>>p[i].no>>p[i].s[0]>>p[i].s[1]>>p[i].s[2];
}
int n;
for(int i=0;i<t-1;i++){
for(int j=i+1;j<t;j++){
int n=comp(p+i,p+j);
if(n)
cout<<p[i].no<<" "<<p[j].no<<" "<<n<<endl;
}
}
return 0;
}
------------------------------------------------------------
//第三种:用二维字符数组表示字符串数组
#include<stdio.h>
#include <iostream>
using namespace std;
#include <algorithm>
#include<cstring>
struct paper{
long code;
char answer[3][20];
};
int cmp(char s1[],char s2[])
{
int len1=strlen(s1),len2=strlen(s2);
int len=(len1<len2?len1:len2);
double num=0;
for(int i=0;i<len;i++)
{ if(s1[i]==s2[i])
num++;
}
if(num/len>=0.89999 )
return 1;
return 0;
}
int comp(paper &p1,paper &p2)
{
for(int i=0;i<3;i++)
if(cmp(p1.answer[i] , p2.answer[i]))
return i+1;
return 0;
}
int main()
{ // freopen("d:\\a.txt", "r", stdin); //上传时,这行要注释掉
int t,i,j,n;
cin>>t;
paper p[t];
for(i=0;i<t;i++)
cin>>p[i].code>>p[i].answer[0]>>p[i].answer[1]>>p[i].answer[2];
for(i=0;i<t-1;i++)
for(j=i+1;j<t;j++)
if(n=comp(p[i],p[j]))
cout<<p[i].code<<" "<<p[j].code<<" "<<n<<endl;
return 0;
}