数据结构经典测试题4

打印 上一主题 下一主题

主题 518|帖子 518|积分 1554

1.

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char *str[3] ={"stra", "strb", "strc"};
  5. char *p =str[0];
  6. int i = 0;
  7. while(i < 3)
  8. {
  9. printf("%s ",p++);
  10. i++;
  11. }
  12. return 0;
  13. }
复制代码
上述代码运行结果是什么?
A: stra strb strc B: s t r C: stra tra ra D: s s s

答案为C
p是char*范例,每次++,后移一个地址,char *p = str[0]相当于char *p = "stra",p先指向此中的字符's',printf输出遇到 0停止,第一次输出"stra",p++后,指向字符't',第二次输出"tra",第三次输出"ra".
2.

  1. #include <stdio.h>
  2. int main() {
  3. int m[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
  4. int(*p)[4] = (int(*)[4])m;
  5. printf("%d", p[1][2]);
  6. return 0;
  7. }
复制代码
上述代码运行结果是什么?
A: 7 B: 3 C: 8 D: 4

答案为A
p是一个数组指针,指向的数组元素是int,长度是4,p被赋值为m的首地址,此时p+1在数组m里会跳过4个元素,相当于 是将m中的元素四个一组进行管理,p[1]拿到第二组{5,6,7,8},而p[1]是5的地址,p[1][2]就是这一组里第三个元素7.
3.

  1. int main()
  2. {
  3. char p1[15]="abcd", *p2="ABCD", str[50]="xyz";
  4. strcpy(str + 2, strcat(p1+2, p2+1));
  5. printf("%s", str);
  6. return 0;
  7. }
复制代码
上述代码运行结果是什么?
A: xyabcAB B: abcABz C: ABabcz D: xycdBCD

答案为D

计算时p1、str退化为首元素地址,则p1+2相当于是字符串"cd"的首地址,p2+1相当于是字符串"BCD"的首地址,strcat函 数将两个字符串拼接,并把新字符串"cdBCD"的首地址返回,再实行strcpy(str+2,"cdBCD");str+2是数组第3个元素'z'的地址 以是,strcpy(str+2,"cdBCD")也就是将'z'及其后的字符用"cdBCD"替换,而前面的"xy"不受影响 以是末了输出"xycdBCD".
4.

4、以下叙述中正确的是( )
A: 两个字符串可以用关系运算符进行巨细比较
B: 函数调用strlen(s);会返回字符串s实际占用内存的巨细(以字节为单位)
C: C语言本身没有提供对字符串进行团体操作的运算符
D: 当拼接两个字符串时,结果字符串占用的内存空间是两个原串占用空间的和


答案为C
A选项错误,通常C语言中两个字符串比较巨细,是借助strcmp()函数进行的。B选项中strlen返回的是字符串除竣事符'\0'的 部分,实际占用内存巨细加上末端符。D选项两个字符串拼接后,原本每个字符串后都会有一个字符串竣事符'\0',而拼接 后,字符串竣事符只剩下一个,以是占用空间会减一.

5.

  1. #include<stdio.h>
  2. char* f(char* str, char ch)
  3. {
  4. char* it1 = str;
  5. char* it2 = str;
  6. while(*it2 != '\0')
  7. {
  8. while (*it2 == ch)
  9. {
  10. it2++;
  11. }
  12. *it1++ = *it2++;
  13. }
  14. return str;
  15. }
  16. int main() {
  17. char a[10];
  18. strcpy(a, "abcdcccd");
  19. printf("%s", f(a, 'c'));
  20. return 0;
  21. }
复制代码
上述代码运行结果时什么?
A: abdcccd B: abdd C: abcc D: abddcccd

答案为D
内层while循环的作用让指针it2跳过字符'c',第一次越过后停在原字符串第一个'd'上,而在之前it1和it2是同步的,赋值不会 改变字符串内容,此时it1停在第一个'c'上,*it1++ = *it2++;语句将'c'替换为'd',字符串变更为"abddcccd",同时指针it1加 加停在第四个字符'd'上,it2再次跳过字符'c',停在末了一个'd'上,赋值后,字符串稳定,再后移外层循环遇到0竣事.


6.

URL化。编写一种方法,将字符串中的空格全部替换为 %20 。假定该字符串尾部有充足的空间存放新增字符, 而且知道字符串的“真实”长度。
示例:
输入:"Mr John Smith ", 13 输出:"Mr%20John%20Smith"
输入:" ", 5 输出:"%20%20%20%20%20"

  1. char* replaceSpaces(char* S, int length){
  2. int count = 0;
  3. for (int i = length - 1; i >= 0; i--) {
  4. if (S[i] == ' ') count++;//统计空格的个数
  5. }
  6. int r_end = length + count * 2; //实际所需数组空间的长度
  7. int c_end = length - 1;//字符串的末尾
  8. S[r_end--] = '\0';//先设置字符串结尾标志
  9. while(c_end >= 0){ //从后往前开始遍历替换
  10. if (S[c_end] == ' ') {//当前字符是空格则向末尾添加 %20
  11. S[r_end--] = '0';
  12. S[r_end--] = '2';
  13. S[r_end--] = '%';
  14. c_end--;
  15. continue;
  16. }
  17. S[r_end--] = S[c_end--];//当前是非空格则直接赋值即可
  18. }
  19. return S;
  20. }
复制代码
     
       谢谢      

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南飓风

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表