本来这一篇应该是C/C++试题集——链表篇的,但是做了一下题目,对于链表小鱼还不是很熟悉,所以还是先看知识点,再做题。过两天再更新链表篇试题集。

对于数组而言,首地址和长度最重要,所以要实现对数组的操作必须制定这两个元素。
对于c风格字符串而言,不需要指定长度,因为c风格字符串他指定了结束符。
字符串:字符串是指一串字符,元素类型必须是char类型,有效的字符串应该以0结尾。
字符串长度(strlen)是指:从第一个字符开始,到结束符0,中间字符的个数。
字符串的操作主要分为:字符串的遍历;字符串的长度计算(0之前的字符个数);字符串的复制(会把0一起拷贝,指字符串中每一个字节的复制。需要注意:目标缓冲区要足够大,避免越界);字符串的比较(字符串中每个字符相同,这两字符串才相同);字符的删除(单个字符删除及多个字符删除);中间字符的插入(单个字符可以选择从后往前插入,多字符考虑复制代替插入);字符串的分割(调整尾部和调整头部两方法)。

1、字符串的遍历:

相关试题:
A、输入一个字符串,然后将每一个字符打印显示,中间加一个空格。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>void print_string(const char* str)
{int len = strlen(str);for (int i = 0; i < len; i++){if (str[i] == 0)break;printf("%c ", str[i]);}
}int main()
{const char* a = "abcd";print_string(a);return 0;
}

B、进行字符串遍历,实现字符串格式替换
描述:
处理一个字符串(仅英文字符),将里面的特殊符号转义为表情。
/s 转为 ^_^
/f 转为 @_@
/c 转为 T_T
法一:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>void translate(const char* str)
{const char* p = str;while (*p){char ch = *p;if (*p != '/'){printf("%c", ch);}else{p++;ch = *p;if (ch=='s'){printf("^_^");}else if (ch == 'f'){printf("@_@");}else if (ch =='c'){printf("T_T");}else{printf("/%c", ch);}}p++;}}int main()
{const char* a = "Thank you/s I will try my best/c";translate(a);return 0;
}

法二:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>void translate(const char* str)
{int len = strlen(str);for (int i = 0; i < len; i++){if (str[i] == '/'&& str[i+1] == 's'){printf("^_^");i++;}else if (str[i]=='/'&&str[i+1] =='c'){printf("T_T");i++;}else if (str[i]=='/'&& str[i+1] == 'f'){printf("@_@");i++;}else{printf("%c", str[i]);}}}int main()
{const char* a = "Thank you/s I will try my best/c";translate(a);return 0;
}

2、字符串的比较:

相关试题:
A:回答检查。例如,有一个系统需要您回答问题。
系统显示: “你生日的月份是?”
如果回答是 “1” 或”jan”或”january”是算正确,显示”您输入正确”
除此之外算错误,显示”您输入错误”

#include <stdio.h>
#include <string.h>
#include <stdlib.h>void compare(const char* str)
{//调用字符串比较函数,strcmp,当两字符串相同时,值为0。if (strcmp(str,"jan")==0||strcmp(str,"january") ==0||strcmp(str,"1") == 0){printf("你输入正确");}else{printf("你输入错误");}
}
char get_input()
{char a[16];printf("你生日的月份是?\n");gets_s(a);compare(a);return 0;
}
int main()
{get_input();return 0;
}

B:输入5字符串,将它们排序后输出。
描述:
例如,输入了5个字符串: “dead”, “alex”, “can”, “best”, “effort”
则程序最终输出为: alex, best, can, dead, effort

#include <stdio.h>
#include <string.h>
#include <stdlib.h>struct Object
{char value[32];
};void select_sort(char* arr[], int n)
{for (int i = 0; i < n-1; i++){for (int j = i+1; j < n; j++){if (strcmp(arr[j], arr[i]) < 0){char* temp = arr[j];arr[j] = arr[i];arr[i] = temp;}}}
}int main()
{int i;Object objs[5];for (i = 0; i < 5; i++){printf("please input:");gets_s(objs[i].value);}printf("over input.\n");char* name[5];for (i = 0; i < 5; i++){name[i] = objs[i].value;}select_sort(name, 5);for (i = 0; i < 5; i++){printf("%s \n", name[i]);}return 0;
}

3、字符串换格式复制

相关试题:
A:有一个整数数组,要求将其格式化为字符串,每个数字以逗号分开。
完成函数:
void to_string(const int* arr, int size, char* output)
{
}
例如,
int arr[4] = { 18, 987, 1235, -911 };
char buf[512];
to_string(arr, 4, buf);
则buf被格式化为字符串 “18, 987, 1235, -911”

#include <stdio.h>
#include <string.h>
#include <stdlib.h>void to_string(const int* arr,int size,char* output)
{char buf[128];int count = 0;for (int i = 0; i < size; i++){sprintf_s(buf, "%d,", arr[i]);for (int j = 0; j < buf[j]; j++){output[count] = buf[j];count++;}}output[count] = 0;
}int main()
{int arr[4] = { 18,987,1235,-911 };char buf[512];to_string(arr, 4, buf);int len = strlen(buf);for (int i = 0; i < len; i++){printf("%c", buf[i]);}printf("\n");return 0;
}

4、字符串的删除(删除字符相当于后面所有的字符都要前移,cpu成本太高,可以从后往前查找再删除;当删除字符太多的情况下,最佳的方案是复制一份)
复制介绍:
首先申请一个相同大小的内存,eg:len = strlen(str); char* copy = (char*)malloc(len+1);再进行边搜索边复制

相关试题:
A、去除字符串两端的空格
例如,
用户输入 ” i am fine ”
则有效的输入是 “i am fine”

#include <stdio.h>
#include <string.h>
#include <stdlib.h>char* AfTrim(char* src)
{int len = strlen(src);int start = 0;  //copy字符串的开头引号int end = 0;  // copy字符串的结尾引号int i = 0;  //从头遍历的引号int k = len-1;  // 从尾遍历的引号char* copy = (char*)malloc(len + 1); //申请一片相同大小的内存while (src[i])  //从头遍历,直至找到不为空格终止{if (src[i] == ' ')i++;else{start = i;break;}}while (src[k])  //从尾遍历,直至找到不为空格终止{if (src[k] == ' '){k--;}else{end = k+1;break;}}//进行copyfor (int j = start; j < end; j++){copy[j-start] = src[j];printf("%c", src[j]);}return copy;free(copy);
}int main()
{char a[] = "   i am fine   ";AfTrim(a);return 0;
}

B:将阿拉伯数字转成中文数字,例如,输入字符串”我爱12你好34”,输出”我爱一二你好三四”(知识点:汉字及数字的替换)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>char* Change(char* src)
{int len = strlen(src);int count = 0;char* copy = (char*)malloc(len + 1);char* chinese[10] = { "零","一","二","三","四","五","六","七","八","九"}; //定义一个中文数字数组for (int i = 0; i < len; i++){if (src[i] == '\0') //终止符就结束break;if (src[i]>='0'&&src[i]<='9') //搜索到数字字符时{int num = src[i] - '0';   //得到数字对应的序号char* hanzi = chinese[num];//去除该序号对应的数组元素copy[count] = hanzi[0];//因为一个中文字符占两个字节,所以要分开赋值copy[count + 1] = hanzi[1];count+=2;}else{copy[count] = src[i];//其他的都不管,照常copycount++;}}for (int j = 0; j < count; j++){printf("%c", copy[j]);}printf("\n");return copy;free(copy);
}int main()
{char a[] = "我爱12你好34";Change(a);return 0;
}

5、字符串的分割

相关试题:
A:字符串分解:一段文本以逗号分开,写一个函数将各段文本打印出来
描述:
一段文本以逗号分开,写一个函数将各段文本打印出来。
例如,文本为”hello, world , good, morning “,
则输出”hello”, “world”,”good”, “morning”

#include <stdio.h>
#include <string.h>
#include <stdlib.h>void Split(const char* text)
{int len = strlen(text);char* copy = (char*)malloc(len + 1);//当搜索到逗号时,将逗号变成终结符for (int i = 0; i < len; i++){if (text[i] == '\0')break;if (text[i] == ','){copy[i] = '\0';}else{copy[i] = text[i];}}//进行分解输出for (int j = 0; j < len; j++){if (copy[j] == '\0'){printf("\n");}else{printf("%c", copy[j]);}}free(copy);
}int main()
{char a[] = "hello,world,good,morning";Split(a);return 0;
}

B:用户输入一个字符串,其中包括若干数字,要求将数字提取出来。
描述:
例如,提示及用户输入如下:
请输入数据, 以空格分开: 12 15 98 (回车)
注:用户输入时中间可能是一个空格,也可能是多个空格,不影响结果。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>int parse(const char* input, int numbers[])
{int count = 0;//char buf[128];int start, end;int flag = 0; //字符是否有效,为1则有效,为0则无效int len = strlen(input);for (int i = 0; i < len; i++ ){if (input[i] == '\0')break;else if (input[i]>='0'&&input[i]<='9'){if (flag == 0){start = i;flag = 1;}   }else{if (flag ==1){end = i;flag = 0;count++;for (int j = start; j < end; j++){printf("%c", input[j]);}printf("\n");}}}printf("%d\n", count);return count;
}int main()
{int number[128];char* str = { "12    15 98 " };parse(str, number);return 0;
}

C:字符串的替换
描述:
完成函数:
int replace( char* src, const char* subtext, const char* newtext);
完成对源字符串src中子串的替换,将subtext出现的地方替换为 newtext
例如,
src: ” just do it . never give up. ”
subtext: “just”
newtext: “some”
注:源字符串中该子串可能出现多次,需依次替换。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>int replace(char* src, const char* subtext, const char* newtext)
{int len1 = strlen(src);int len2 = strlen(subtext);int j = 0;int start = 0;for (int i = 0; i < len1; i++){if (src[i] == '\0')break;if (src[i] = subtext[j]){j++;}}return 0;
}int main()
{char* src = "just do it . never give up. ";char* subtext = "just";char* newtext = "some";replace(src, subtext, newtext);return 0;
}

D:字符串提取子串
描述:
要求一个函数,用于提取一个字符串的子串。
例如,对于一个字符串”hello”,可以调用函数substr,通过指定子串的位置和长度信息,得到子串”el“

#include <stdio.h>
#include <string.h>
#include <stdlib.h>int substr(char* src, int start, int num)
{char buf[128];for (int i = start; i < start+num; i++){buf[i - start] = src[i];printf("%c", src[i]);}buf[num] = 0;return 0;
}int main()
{char* src = "hell0";substr(src,1, 2);return 0;
}

字符串好多扩充点,小鱼觉得好难,这就当一个引导篇,大家一起加油,如果喜欢请留个赞再走哦,持续更新中。。。

C/C++试题集——字符串篇相关推荐

  1. [转载] 必须要会回答的Java面试题(字符串篇)

    参考链接: 比较Java中的两个字符串String 最近很多学习java的小白问我字串相关的问题,觉得很有必要整理下,以方便初学者理解字符串以及应对今后面试中考官的提问. 如果你是有几年Java开发经 ...

  2. java面试题集汇总

    http://blog.csdn.net/jackfrued/article/details/44921941  Java面试题全集(上) http://blog.csdn.net/jackfrued ...

  3. php 面试,PHP 经典面试题集

    这篇文章介绍的内容是关于PHP 经典面试题集 PHP 经典面试题集,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 结合我自己这几天面试情况,面对的一些php面试题列举出来,基本上结合自 ...

  4. Java面试题集(136-150)

    Java程序员面试题集(136-150) 摘要:这一部分主要是数据结构和算法相关的面试题目,虽然只有15道题目,但是包含的信息量还是很大的,很多题目背后的解题思路和算法是非常值得玩味的. 136.给出 ...

  5. php面试题之一,PHP的面试题集

    PHP的面试题集 更新时间:2006年11月19日 00:00:00   作者: 面试题1 1.用PHP打印出前一天的时间格式是2006-5-10 22:21:21 2.echo(),print(), ...

  6. 华为C语言面试题集 C语言面试题-华为C语言面试题 深圳华为面试

    C语言面试题  1.局部变量能否和全局变量重名? 答:能,局部会屏蔽全局.要用全局变量,需要使用"::" 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量, ...

  7. java高级工程师开放面试题集二

    临近年关,不少人蠢蠢欲动,有童鞋问我java后端面试会面试什么? 作为一个java后端老鸟,跌打滚爬多次被面试和面试别人,总结了一些经验,希望对大家有所帮助. 特别说明,仅仅针对工作两年以上的java ...

  8. 剑指offer试题(PHP篇一)

    剑指offer试题(PHP篇一) 1.二维数组中的查找 题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个 ...

  9. C语言面试题之华为篇2(答案全)

    C语言面试题之华为篇(答案全) (1)什么是预编译,何时需要预编译: 答案: 1.总是使用不经常改动的大型代码体. 2.程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项.在这种情况 ...

  10. 2020前端最新面试题(vue篇)

    2020前端最新面试题(vue篇) 由于疫情原因,原本每年的"金三银四"仿佛消失,随之而来的是找工作的压力,这里给要面试的小伙伴们总结了到目前为止我遇到的前端面试题,仅供参考哦,第 ...

最新文章

  1. SAP RETAIL 参考PO创建分配表之二
  2. SSE3 和 SSSE3 Intrinsics各函数介绍
  3. Nginx的rewrite应用
  4. Python学习笔记:数据库2
  5. RxSwift之深入解析如何创建观察者Observer
  6. [剑指offer] 数组中只出现一次的数字
  7. 在react里写原生js_小程序原生开发与第三方框架选择
  8. 不要在给自己不学习找借口了,否则…
  9. java 重载 大于_详解java重载与覆写的区别
  10. tablelayout高度问题
  11. PDF电子发票解析免费版
  12. 美化你的Xfce桌面
  13. 电机学Matlab仿真代码
  14. 双目结构光系统论文阅读总结
  15. matlab与化学,MATLAB与化学
  16. python从小到大排序
  17. 更新源linux命令,Linux更新源
  18. 第八次网络前端培训笔记
  19. java语言中的while、do while、for循环
  20. 洛谷P4799 [CEOI2015 Day2] 世界冰球锦标赛

热门文章

  1. VS code Markdown Preview Enhanced 预览白色改为黑色
  2. P2P流量检测8个方向
  3. QQ邮箱一键删除所有邮件的方法
  4. MYSQL备份还原失败终极解决方法
  5. 计算机设置新网络,新买的电脑怎么设置网络连接
  6. 密码学-->buuctf49~60
  7. java写 狐狸找兔子_C++经典问题:狐狸找兔子
  8. c++:std::dec, std::hex, std::oct
  9. 华师大 OJ 3036
  10. 12.STC15W408AS单片机比较器