华为机试题(3)

1.       给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成bz换成aZ换成A,如aBf转换成bCg,字符串内的其他字符不改变,给定函数,编写函数

void  Stringchangconst  char*inpu,char*output

其中input是输入字符串,output是输出字符串

#include <stdio.h>
#include <string.h>

void  Stringchange(const  char* input,char* output)
{
	while(*input)
	{
		if(*input>='a'&& *input<= 'y' || *input>='A' && *input<= 'Y')
		{
			* output = *input+1;
			output++;
			input++;
		}
		else if(*input == 'z' || *input == 'Z')
		{
			* output = *input-25;
			output++;
			input++;
		}
		else
		{
			* output = *input;
			output++;
			input++;
		}
		
	}
	*output = '\0';

}
int main(/*int argc, char **argv*/)
{
	const char input[20]="zzzzZZZZabcABC";
	char output[20];
	Stringchange(input,output);
	printf("output is %s",output);
	system("pause");
	return 0;
}

2.       求一个整型数字中有没有相同的部分,例如12389756123这个整型数字中相同的部分是123,相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。方法是先将整型数字转换到数组中,再判断。

函数为  int sameint num

其中num是输入的整型数字

#include <stdio.h>
#include <string.h>

int same(int num)
{
	int tmp[20];
	int m=0;
	int i,j;
	while(num>0)
	{
		tmp[m]=num%10;
		num/=10;
		m++;
	}
	for(i=0;i<m-3;i++)
		for(j=i+2;j<m-1;j++)
			if(tmp[i]==tmp[j] && tmp[i+1]==tmp[j+1])
				return 1;
	return 0;
	
}
int main(/*int argc, char **argv*/)
{
	int ret;
	ret=same(173654123);
	printf("ret is %d",ret);
	system("pause");
	return 0;
}



1.从两个数组的最后一个元素比较两个数组中不同元素的个数,如有array1[5]={77,21,1,3,5}, array2[3]={1,3,5},从array1[4]array2[2]比较开始,到array1[2]array[0]比较结束。这样得出它们不同的元素个数为0,若array1[6]={77,21,1,3,5,7},那么他们不同的元素为3

  函数原型为 int compare_array( int len1, int array1[], int len2, int array2[] );

  其中,len1len2分别为数组array1[]array2[]的长度,函数返回值为两个数组不同元素的个数。

#include <stdio.h>
#include <string.h>

int compare_array( int len1, int array1[], int len2, int array2[] )
{
	int i=0;
	int cnt=0;
	printf("hello in compare_array\n");
	while (len1-1-i>=0 && len2-1-i>=0)
	{
		if(array1[len1-1-i]!=array2[len2-1-i])
			cnt++;
		i++;
		
	}
	return cnt;

}
int main(/*int argc, char **argv*/)
{
	
	int ret;
	int array1[5]={77,21,1,3,5};
	int array2[4]={1,3,5,7};
	printf("hello\n");
	ret=compare_array(5,array1,4,array2);
	printf("ret is %d",ret);
	system("pause");
	return 0;
}


 判断一个数是不是回文数:

#include <stdio.h>
#include <string.h>

int huiwen(long num)
{
	int tmp[50];
	int m=0;
	int begin;
	int end;
	while(num>0)
	{
		tmp[m]=num%10;
		num/=10;
		m++;
	}
	begin = 0;
	end	= m-1;
	while(begin<end)
	{
		if(tmp[begin++]!=tmp[end--])
			return 0;
	}
	return 1;
}
int main(/*int argc, char **argv*/)
{
	int ret;
	long num=1234554321;
	ret = huiwen(num);
	if(ret == 0)
		printf("not huiwen\n");
	else if(ret == 1)
		printf("huiwen\n");
	system("pause");
	return 0;
}


 删掉重复的字符,只保留一个。

#include <stdio.h>
#include <string.h>

void changestr(const char *pIn,char *pOut)
{
	char *r=pIn;
	char *s=pIn;
	
	*pOut++ = *pIn;

	while(*++pIn!='\0')
	{
		if(*pIn != *r++)
			*pOut++ = *pIn;
	}
	*pOut = '\0';
}

int main(/*int argc, char **argv*/)
{
	
	char pIn[20]="goorooogllle";
	char pOut[20];
	changestr(pIn,pOut);
	printf("%s ",pOut);

	system("pause");
	return 0;
}


 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值