1、1华为校园招聘机考试题总结(软件)1、删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。#include #include #include #include int delete_sub_str(const char *str,const char *sub_str,char *result)assert(str != NULL const char *p,*q;char *t,*temp;p = str;q = sub_str;t = result;int n,count = 0;n = strlen(q);tmep = (char *)malloc(n+1);mems
2、et(temp,0x00,n+1);while(*p)memcpy(temp,p,n);if(strcmp(temp,q) = 0 )count+;memset(temp;0x00,n+1);p = p + n;else*t = *p;p+;t+;memset(temp,0x00,n+1);2free(temp);return count;int main()char s100 = 0;int num = delete_sub_str(“123abc12de234fg1hi34j123k”,”123”,s);printf(“The number of sub_str is %drn”,num)
3、;printf(“The result string is %srn”,s);2、约瑟夫环是一个数学的应用问题:已知 n 个人(以编号 1,2,3.n 分别表示)围坐在一张圆桌周围。从编号为 k 的人开始报数,数到 m 的那个人出列;他的下一个人又从 1 开始报数,数到 m 的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。#include#includetypedef struct Nodeint num;struct Node *next;LinkList;LinkList *creat(int n)LinkList *p,*q,*head;int i=1; p=(LinkLis
4、t *)malloc(sizeof(LinkList);p-num=i;head=p;for(i=2;inum=i;p-next=q;p=q;3p-next=head; /*使链表尾指向链表头 形成循环链表*/return head;void fun(LinkList *L,int m)int i;LinkList *p,*s,*q;p=L;printf(“出列顺序为:“);while(p-next!=p)for(i=1;inext;printf(“%5d“,p-num);s=p;q-next=p-next;p=p-next;free(s);printf(“%5dn“,p-num);int m
5、ain()LinkList *L;int n, m;n=9;m=5;L=creat(n);fun(L,m);return 0;3、比较一个数组的元素 是否为回文数组#include 4#include int huiwen(char str)int i,len,k=1;len=strlen(str);for(i=0;i#include#includeint array_compare(int len1, int array1, int len2, int array2)int count=0;for( ;len1=0len1-,len2-)if(array1len1-1=array2len2-
6、1)count+;return count;int main()int result=0;int array1=1,3,5;6int len1=3;int array2=77,12,1,3,5;int len2=5;result=array_compare( len1, array1, len2, array2); /result=array_compare( len1, array1, len2, array2);不能这样/ 函数形参中永远只是传得首地址,不能传数组 切记切记!printf(“the result is %d“, result);5、约瑟夫问题 问题描述: 输入一个由随机数组
7、成的数列(数列中每个数均是大于 0 的整数,长度已知),和初始计数值 m。从数列首位置开始计数,计数到 m 后,将数列该位置数值替换计数值 m,并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列所有数值出列为止。如果计数到达数列尾段,则返回数列首位置继续计数。请编程实现上述计数过程,同时输出数值出列的顺序比如: 输入的随机数列为:3,1,2,4,初始计数值 m=7,从数列首位置开始计数(数值 3 所在位置)第一轮计数出列数字为 2,计数值更新 m=2,出列后数列为 3,1,4,从数值 4所在位置从新开始计数第二轮计数出列数字为 3,计数值更新 m=3,出列后数列为 1,4,从数值 1
8、 所在位置开始计数第三轮计数出列数字为 1,计数值更新 m=1,出列后数列为 4,从数值 4 所在位置开始计数最后一轮计数出列数字为 4,计数过程完成。输出数值出列顺序为:2,3,1,4。 要求实现函数: void array_iterate(int len, int input_array, int m, int output_array)【输入】 int len:输入数列的长度;int intput_array:输入的初始数列int m:初始计数值7【输出】 int output_array:输出的数值出列顺序【返回】 无 示例 输入:int input_array = 3,1,2,4,i
9、nt len = 4, m=7输出:output_array = 2,3,1,4/循环链表实现/#include#include#includetypedef struct Nodeint num;struct node *next; node;node *creat(int len , int input_array)node *h,*s,*p;int i;h=(node*)malloc(sizeof(node);h-num=input_array0;p=h;for(i=1;inum=input_arrayi;p-next=s;p=s;p-next=h;return (h);void arr
10、ay_iterate(int len, int input_array, int m)node *q,*p,*s;8int i=0,j=0,k;int output_array4;p=creat(len,input_array);while(p-next!=p)for(i=1;inext;m=p-num;printf(“%5d“,m);output_arrayj+=m;s=p;q-next=p-next;p=p-next;free(s);s=NULL;m=p-num;printf(“%5dn“,m);output_arrayj=p-num;k=j;for(j=0 ; j#include10#i
11、nclude#include#define LENGTH 13int verifyMsisdn(char *inMsisdn)char *pchar=NULL;assert(inMsisdn!=NULL);if(LENGTH=strlen(inMsisdn)if(8=*inMsisdn)for( ;len1=0len1-,len2-)if(array1len1-1=array2len2-1)count+;return count;int main()int result=0;int array1=1,3,5;int len1=3;int array2=77,12,1,3,5;int len2=
12、5;result=array_compare(len1, array1, len2, array2); /result=array_compare( len1, array1, len2, array2);不能这样/ 函数形参中永远只是传得首地址,不能传数组 切记切记!13printf(“the result is %d“, result);8、简单四则运算 问题描述: 输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值注: 1、表达式只含 +, -, *, / 四则运算符,不含括号2、表达式数值只包含个位整数(0-9),且不会出现 0 作为除数的情况3、要考虑加减乘除按通常四
13、则运算规定的计算优先级4、除法用整数除法,即仅保留除法运算结果的整数部分。比如 8/3=2。输入表达式保证无 0 作为除数情况发生5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况 要求实现函数: int calculate(int len,char *expStr)【输入】 int len: 字符串长度;char *expStr: 表达式字符串;【输出】 无【返回】 计算结果 示例 1) 输入:char *expStr = “1+4*5-8/3”函数返回:192) 输入:char *expStr = “8/3*3”函数
14、返回:6 #include /* author by wanww* time: 2011-09-07*/using namespace std;int array_compare(int len1, int array1, int len2, int array2)if(len1 = len2) int count = 0;14for (int i=0;i=0 int dazhong=0;int zongfen=0;int i;int number=0;for(i=0;i#include#includevoid sort(int input, int n, int output)21int i
15、,j;int k=1;int temp;int med;for(i=0;iinputj+1)temp=inputj;inputj=inputj+1;inputj+1=temp;if(n%2!=0)for(i=0;i= 50 且 #include#include#include23void scheduler1(int task, int n, int system_task, int user_task)int i;int j=0;int *p,*pp,*p_user,*pp_user;int index=0;int count,count2;int min=0;int k=0;p=(int*
16、)malloc(sizeof(int)*n);for(i=0;iint compare_array(int len1,int array1,int len2,int array2)int i,t,small,num=0;/把两数组倒置for(i=0;ilen2)small=len2;elsesmall=len1;num=small;for(i=0;iint main()char str20, *p;int length=0;printf(“Please input a string: ”);gets(str);p=str;while(*p+)length+;28printf(“The leng
17、th of string is %dn”, length);return 0;14、使用 C 语言实现字符串中子字符串的替换描述:编写一个字符串替换函数,如函数名为 StrReplace(char* strSrc, char* strFind, char* strReplace),strSrc 为原字符串,strFind 是待替换的字符串,strReplace 为替换字符串。举个直观的例子吧,如:“ABCDEFGHIJKLMNOPQRSTUVWXYZ”这个字符串,把其中的“RST”替换为“ggg”这个字符串,结果就变成了:ABCDEFGHIJKLMNOPQgggUVWXYZ答案一:#inclu
18、de #include void StrReplace(char* strSrc, char* strFind, char* strReplace);#define M 100;void main()char s=“ABCDEFGHIJKLMNOPQRSTUVWXYZ“;char s1=“RST“;char s2=“ggg“;StrReplace(s,s1,s2);printf(“%sn“,s);void StrReplace(char* strSrc, char* strFind, char* strReplace)int i=0;int j;int n=strlen(strSrc);int
19、 k=strlen(strFind);for(i=0;i#define MAX 100StrReplace(char *s, char *s1, char *s2) char *p;for(; *s; s+) for(p = s1; *p p+);if(*p) *s = *(p - s1 + s2);int main()char sMAX; /s 是原字符串char s1MAX, s2MAX; /s1 是要替换的/s2 是替换字符串puts(“Please input the string for s:“);scanf(“%s“, s);puts(“Please input the strin
20、g for s1:“);scanf(“%s“, s1);puts(“Please input the string for s2:“);scanf(“%s“, s2);StrReplace(s, s1, s2);puts(“The string of s after displace is:“);printf(“%sn“, s);return 0;答案三:30#include #include #include #define M 100void StrReplace(char* strSrc, char* strFind, char* strReplace);int main()char s
21、=“ABCDEFGHIJKLMNOPQRSTUVWXYZ“;char s1=“RST“;char s2=“gggg“;StrReplace(s,s1,s2);printf(“%sn“,s);return 0;void StrReplace(char* strSrc, char* strFind, char* strReplace)while(*strSrc != 0)if(*strSrc = *strFind)if(strncmp(strSrc,strFind,strlen(strFind) = 0 )int i = strlen(strFind);int j = strlen(strReplace);printf(“i = %d,j = %dn“,i,j);char *q = strSrc + i;printf(“*q = %sn“,q);while(*strSrc+ = *strReplace+) != 0);printf(“strSrc - 1 = %sn“,strSrc - 1);printf(“*q = %sn“,q);while(*strSrc+ = *q+) != 0);elsestrSrc+;