华为机试题(3)

本文介绍了几个实用的C语言函数,包括字符串字母的转换、查找整数中的重复序列、比较两个数组的不同元素数量、判断回文数以及删除字符串中的重复字符。通过这些函数的学习和实践,读者可以更好地掌握C语言的基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

void Stringchangconst char*inpu,char*output

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

  1. #include<stdio.h>
  2. #include<string.h>
  3. voidStringchange(constchar*input,char*output)
  4. {
  5. while(*input)
  6. {
  7. if(*input>='a'&&*input<='y'||*input>='A'&&*input<='Y')
  8. {
  9. *output=*input+1;
  10. output++;
  11. input++;
  12. }
  13. elseif(*input=='z'||*input=='Z')
  14. {
  15. *output=*input-25;
  16. output++;
  17. input++;
  18. }
  19. else
  20. {
  21. *output=*input;
  22. output++;
  23. input++;
  24. }
  25. }
  26. *output='\0';
  27. }
  28. intmain(/*intargc,char**argv*/)
  29. {
  30. constcharinput[20]="zzzzZZZZabcABC";
  31. charoutput[20];
  32. Stringchange(input,output);
  33. printf("outputis%s",output);
  34. system("pause");
  35. return0;
  36. }
#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是输入的整型数字

  1. #include<stdio.h>
  2. #include<string.h>
  3. intsame(intnum)
  4. {
  5. inttmp[20];
  6. intm=0;
  7. inti,j;
  8. while(num>0)
  9. {
  10. tmp[m]=num%10;
  11. num/=10;
  12. m++;
  13. }
  14. for(i=0;i<m-3;i++)
  15. for(j=i+2;j<m-1;j++)
  16. if(tmp[i]==tmp[j]&&tmp[i+1]==tmp[j+1])
  17. return1;
  18. return0;
  19. }
  20. intmain(/*intargc,char**argv*/)
  21. {
  22. intret;
  23. ret=same(173654123);
  24. printf("retis%d",ret);
  25. system("pause");
  26. return0;
  27. }
#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[]的长度,函数返回值为两个数组不同元素的个数。

  1. #include<stdio.h>
  2. #include<string.h>
  3. intcompare_array(intlen1,intarray1[],intlen2,intarray2[])
  4. {
  5. inti=0;
  6. intcnt=0;
  7. printf("helloincompare_array\n");
  8. while(len1-1-i>=0&&len2-1-i>=0)
  9. {
  10. if(array1[len1-1-i]!=array2[len2-1-i])
  11. cnt++;
  12. i++;
  13. }
  14. returncnt;
  15. }
  16. intmain(/*intargc,char**argv*/)
  17. {
  18. intret;
  19. intarray1[5]={77,21,1,3,5};
  20. intarray2[4]={1,3,5,7};
  21. printf("hello\n");
  22. ret=compare_array(5,array1,4,array2);
  23. printf("retis%d",ret);
  24. system("pause");
  25. return0;
  26. }
#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;
}


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

  1. #include<stdio.h>
  2. #include<string.h>
  3. inthuiwen(longnum)
  4. {
  5. inttmp[50];
  6. intm=0;
  7. intbegin;
  8. intend;
  9. while(num>0)
  10. {
  11. tmp[m]=num%10;
  12. num/=10;
  13. m++;
  14. }
  15. begin=0;
  16. end=m-1;
  17. while(begin<end)
  18. {
  19. if(tmp[begin++]!=tmp[end--])
  20. return0;
  21. }
  22. return1;
  23. }
  24. intmain(/*intargc,char**argv*/)
  25. {
  26. intret;
  27. longnum=1234554321;
  28. ret=huiwen(num);
  29. if(ret==0)
  30. printf("nothuiwen\n");
  31. elseif(ret==1)
  32. printf("huiwen\n");
  33. system("pause");
  34. return0;
  35. }
#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;
}


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

  1. #include<stdio.h>
  2. #include<string.h>
  3. voidchangestr(constchar*pIn,char*pOut)
  4. {
  5. char*r=pIn;
  6. char*s=pIn;
  7. *pOut++=*pIn;
  8. while(*++pIn!='\0')
  9. {
  10. if(*pIn!=*r++)
  11. *pOut++=*pIn;
  12. }
  13. *pOut='\0';
  14. }
  15. intmain(/*intargc,char**argv*/)
  16. {
  17. charpIn[20]="goorooogllle";
  18. charpOut[20];
  19. changestr(pIn,pOut);
  20. printf("%s",pOut);
  21. system("pause");
  22. return0;
  23. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值