C语言的一些程序
2016-03-29 18:51
776 查看
Q1:
编写一个函数:squzze(s1,s2)
将字符串s1中任何与s2相匹配的字符都删掉。
分析:
用两个for循环,s1在外层,s2在内层
s1中的每个元素都在s2中遍历一遍
如果能够一直遍历到最后退出内层for循环。
Q2:
编写函数any(s1,s2)
将字符串S2中的任意字符串在S1中第一次出现的位置作为结果返回,如果S1不含S2的字符,则返回-1.
分析如下:
还是用两个for循环来进行遍历
如果内层循环s1 == s2,则返回值
如果都没有,则返回-1
Q3:
编写一个函数setbits(x,p,n,y)
将函数返回对X执行下列操作后的结果:将X中的第P位开始的n个位设置成y中最右边n位的值,其余各位不变
分析:
xxxx—xxnnnxxx–xxxx X
yyyy—yyyyyyyy–ynnn Y
操作:
xxxx—xx000xxx–xxxx X
0000—00nnn00–0000 Y
在或一下。
Q4:
编写一个函数:binsearch(int x,int v[],int n)
折半查找
分析:折半查找的一个前提是必须要数组v[]的元素为顺序排列(在这里以升序为例)
Q5:
编写函数:escape (s1,s2)
将字符串s2内的函数复制到s1中去,并在复制过程中替换为转义字符
分析:
第一步:复制字符串很好写
第二步:替换
Q6:
编写函数:reverse(char s[])
倒置函数
分析:类似于两个数交换,只不过是距离最远的数
Q7:
编写一个函数:squzze(s1,s2)
将字符串s1中任何与s2相匹配的字符都删掉。
分析:
用两个for循环,s1在外层,s2在内层
s1中的每个元素都在s2中遍历一遍
如果能够一直遍历到最后退出内层for循环。
void squeeze (char s1[], char s2[]){ int i = 0, j = 0, k = 0; for(i = 0; s1[i] != '\0'; i++){ for(j = 0; s2[j] != '\0' && s2[j] != s1[i]; j++) ; if(s2[j] == '\0') s1[k++] = s1[i]; } s1[k] = '\0'; }
Q2:
编写函数any(s1,s2)
将字符串S2中的任意字符串在S1中第一次出现的位置作为结果返回,如果S1不含S2的字符,则返回-1.
分析如下:
还是用两个for循环来进行遍历
如果内层循环s1 == s2,则返回值
如果都没有,则返回-1
void any(char s1[], char s2[]){ int i = 0, j = 0, k = 0; for(i = 0; s1[i] != '\0'; i++) for(j = 0; s2[j] != '\0'; j++) if(s2[j] == s1[i]) return j; return -1; }
Q3:
编写一个函数setbits(x,p,n,y)
将函数返回对X执行下列操作后的结果:将X中的第P位开始的n个位设置成y中最右边n位的值,其余各位不变
分析:
xxxx—xxnnnxxx–xxxx X
yyyy—yyyyyyyy–ynnn Y
操作:
xxxx—xx000xxx–xxxx X
0000—00nnn00–0000 Y
在或一下。
unsigned setbits(unsigned x, int p, int n, unsigned y){ return x & ~((~(~0 << n)) <<(p + 1 - n)) | (y & ~(~0 <<n)) << (p + 1 -n); }
Q4:
编写一个函数:binsearch(int x,int v[],int n)
折半查找
分析:折半查找的一个前提是必须要数组v[]的元素为顺序排列(在这里以升序为例)
int binsearch(int x, int v[],int n) { int low = 0, high = n - 1; mid = 0; while(low <= high) { mid = (low + high) /2; if(x < v[mid]) high = mid - 1; else if(x > v[mid]) low = mid + 1; else return mid; } return -1; }
Q5:
编写函数:escape (s1,s2)
将字符串s2内的函数复制到s1中去,并在复制过程中替换为转义字符
分析:
第一步:复制字符串很好写
第二步:替换
void escape(char s1[], char s2) { int i = 0, j = 0; for(i = 0; s2[i] != '\0'; i++) { switch(s2[i]) { case '\n': s1[j++] = '\\'; s1[j++] = 'n'; break; case '\t': s1[j++] = '\\'; s1[j++] = 't'; break; default: s1[j++] = s2[i]; break; } } }
Q6:
编写函数:reverse(char s[])
倒置函数
分析:类似于两个数交换,只不过是距离最远的数
void reverse(char s[]) { int i = 0, j = 0, temp = 0; for( i = 0 , j = strlen(s) - 1; i < j; i++, j--) { temp = s[i]; s[i] = s[j]; s[j] = temp; } }
Q7:
相关文章推荐
- 微软笔试题
- C++虚函数分析[1]--同名函数继承二义性问题
- C++代码实现rsa签名校验
- C++第二次实验
- 【C++】删除字符串中的子串
- Netease研发实习生一面
- C++第二次作业Plus
- c++第三次实验
- C++使用hash_map时警告(backward_warning.h:28:)
- 【C语言】百度搜歌(只用歌曲或者歌手名字去搜索实现)
- C++ 模板 之 类型萃取 与 容器适配器
- 实现C++基本内容之构造函数、析构函数和赋值函数
- vs2010 c++ tagVARIANT 转换成 long
- zlib库内存压缩解压缩函数的C++便利性封装
- c++忽略大小比较
- vs2010 c++ long转换成CString
- vs2010 c++ 编辑框设置
- C++标准转换运算符 --四种
- 嵌入式C语言一些用法
- 排序(5)---------高速排序(C语言实现)