某农业大学c/c++第四次实验(数组、指针、字符串)

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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值