1. | 3-17 strcmp() 【问题描述】 请输入一个字符串,模仿系统函数strcmp()的功能,编写MyStrcmp 函数,该函数原型为 int MyStrcmp(char s[],char s[]);要求在 main函数中输入两个字符串,并根据调用的MyStrcmp函数的返回值输出“大于”、“小于”或“等于”。 【输入形式】 两行两个字符串 按照题目要求输出“大于”、“等于”、“小于”。 abcde dbsaifd 小于 要求自己使用函数实现,使用系统自带的函数不得分。 |
---|
#include<bits/stdc++.h>
using namespace std;
int MyStrcmp(const char* str1, const char* str2)
{
while(*str1 == *str2)
{
if(*str1 == '\0')
{
return 0;
}
str1++;
str2++;
}
if(*str1 > *str2)
{
return 1;
}
else if(*str1 == *str2)
{
return 0;
}
else
{
return -1;
}
}
int main()
{
char s1[100],s2[100];
cin>>s1;
cin>>s2;
int flag=MyStrcmp(s1,s2);
if(flag==-1)
{
cout << "小于";
}
else if(flag==0)
{
cout << "等于";
}
else
{
cout << "大于";
}
return 0;
}
2. | 数组中相同数据的删除问题(一维数组、排序、循环) 【问题描述】 对一维数组中存储的数据首先进行从小到大的排序(冒泡、选择、插入、快速排序均可),然后删除序列中相同的数据,仅保留一个,最后输出数组中的数据。务必自行设计函数实现排序功能、删除功能、数组元素录入及个数统计功能、数组元素输出的功能等。 提示:删除时,可额外申请另一个数组存放结果,用len表示新的长度。 for(i=对原一维数组下标的依次循环,原长度为n) { 将a[i]放入新的数组b[len];len++; for(j=从i+1开始向后循环) { 如果a[j]!=a[i],则跳出;否则继续i++,j++} } 【输入形式】一些随机的数据,输入-1代表输入结束 【输出形式】删除后的结果,注意:最后一个数据后面有一个空格 【样例输入】9 9 0 32 2 78 2 8 5 3 1 9 0 2 6 6 7 -1 【样例输出】0 1 2 3 5 6 7 8 9 32 78 |
---|
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
void sortt(int a[],int n)
{
for(int i=0;i<n-1;i++)
{
int min=i;
for(int j=i+1;j<n;j++)
{
if(a[min]>a[j])
min=j;
}
if(min!=i)
{
int t=a[min];
a[min]=a[i];
a[i]=t;
}
}
}
int Delete(int a[],int n)//一个数组解决
{
int len=1;//需要是1 因为啊arr[0]一定被保存
for(int i=1;i<n;i++)
{
if(a[i]!=a[i-1])
{
a[len++]=a[i];
}
else
continue;
}
return len;
}
int main()
{
int a[100],n=-1;
do
{
n++;
cin>>a[n];
}while(a[n]!=-1);
sortt(a,n);
int k=Delete(a,n);
for(int i=0;i<k;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
3. | 交换数组中最大和最小元素的位置。 【问题描述】利用案例1中的swap函数,从键盘输入10个整数,用函数编程实现计算其最大值和最小值,并互换它们在数组中的位置。 要求:1)定义swap(int *x, int *y)函数,实现两个数据的交换; 2)定义函数FindMaxMinid(int arr[], int nCount, int *max_id, int *min_id),找到数组arr中最大元素和最小元素的下标; 3)在main函数中实现数组的输入;调用FindMaxMinid函数;并交换两个元素的位置。 1 2 3 4 5 6 7 8 9 10 10 2 3 4 5 6 7 8 9 1 |
---|
#include<bits/stdc++.h>
using namespace std;
void swap(int *aa,int *bb)
{
int t=*aa;
*aa=*bb;
*bb=t;
}
void FindMaxMinid(int arr[],int nCount,int *max_id,int *min_id)
{
int a=0,b=0;
for(int i=0;i<nCount;i++)
{
for(int j=0;j<nCount;j++)
{
if(arr[j]>=arr[a]) a=j;
if(arr[j]<=arr[b]) b=j;
}
}
//cout << a<<" "<<b<<endl;
*max_id=a;
*min_id=b;
}
int main()
{
int arr[10];
for(int i=0;i<10;i++)
{
cin>>arr[i];
}
int *max_id,maxx,*min_id,minn;
max_id=&maxx;
min_id=&minn;
FindMaxMinid(arr,10,max_id,min_id);
int *c,*d;
c=&arr[*max_id];
d=&arr[*min_id];
//cout << c<<" "<< d<< endl;
swap(c,d);
for(int i=0;i<10;i++)
{
cout << arr[i] << " ";
}
return 0;
}
4. | 字符串中的字符删除 【问题描述】分别用字符数组或字符指针做函数参数,在字符串中删除与某字符相同的字符,执行两次删除和结果输出显示。若删除后为空串,则输出NULL。 void Delete1(char s[ ], char ch); void Delete2(char *p, char ch); abcdabcd c d abdabd abab |
---|
#include<bits/stdc++.h>
using namespace std;
void Delete1(char s[], char ch)
{
int num=strlen(s);
for(int i=0;i<num;i++)
{
if(s[i]==ch)
s[i]=' '; //ch已经是一个字符,不用加单引号;
}
}
void Delete2(char *p, char ch)
{
for(;*p!='\0';p++)
{
if(*p==ch)
*p=' ';
}
}
int main()
{
char s[100];
gets(s);
bool flag1=false,flag2=false;
char c;
cin>>c;
Delete1(s,c);
int num=strlen(s);
for(int i=0;i<num;i++)
{
if(s[i]== ' ') continue;
else
{
cout << s[i];
flag1=true;
}
}
cout << endl;
cin>>c;
Delete2(s,c);
num=strlen(s);
for(int i=0;i<num;i++)
{
if(s[i]== ' ') continue;
else
{
cout << s[i];
flag2=true;
}
}
if(!flag1 || !flag2) cout << "NULL";
else cout << endl;
return 0;
}