嵌入式面试题 C C++ 字符串面试题总结

15 printf(“%d\n”,cout);
16
17 return 0;
18 }


## **6.编写函数形式参数为字符数组,对该字符数组存储的字符串中的字符从小到大排序并输出。**



1 #include <stdio.h>
2 #include <string.h>
3
4 #define N 6
5
6 int main(void) {
7
8 int i,j;
9 char a[] = “asdfgh”;
10 for(i = 0;i<N-1;i++)
11 {
12 for(j = 0;j<N-1-i;j++)
13 {
14 if(a[j]>a[j+1])
15 {
16 int temp = a[j];
17 a[j] = a[j+1];
18 a[j+1] = temp;
19 }
20 }
21 }
22 printf(“%s\n”,a);
23
24 return 0;
25 }


**C++实现:https://blog.csdn.net/qq\_23100787/article/details/50475510**



1 #include
2 #include
3 #include
4 using namespace std;
5
6 int main() {
7
8 string a = “bcasd”;
9 sort(a.begin(),a.end());
10 cout << a << endl;
11
12 return 0;
13 }


## **7.一个字符串和一个单个字符,在字符中删除所有的单个字符**



1 #include <stdio.h>
2
3 int main()
4 {
5 char a[] = “asdfga”;
6 char b = ‘a’;
7 for(int i = 0;a[i]!=‘\0’;i++)
8 {
9 if(a[i]==b)
10 {
11 for(int j = i;a[j]!=‘\0’;j++)
12 {
13 a[j] = a[j+1];
14 }
15 }
16 }
17 printf(“%s\n”,a);
18
19 return 0;
20 }


## **8.编写函数,函数有两个字符串类型的形参,将在第一个字符串中出现的但在第二个字符串未出现的字符存放在第三个数组中并输出。**


例如:第一个字符串是"ABACDEFGH" 第二个字符串是"BCD" 则第三个字符串是"AAEFGH"



1 #include <stdio.h>
2
3 int main()
4 {
5 int i,j,temp,x = 0;
6 char a[] = “ABACDEFGH”,b[] = “BCD”,c[10];
7 for(i = 0;a[i]!=‘\0’;i++)
8 {
9 temp = 1;
10 for(j = 0;b[j]!=‘\0’&&temp;j++)
11 if(a[i] == b[j]) temp = 0;
12 if(temp)
13 {
14 c[x] = a[i];
15 x++;
16 }
17 }
18 c[x] = 0;
19 printf(“%s\n”,c);
20 return 0;
21 }


## **9.对于一个字符串,设计一个算法,将包括i位置在内的左侧部分移动到右边,将右侧部分移动到左边。给定字符串A和它的长度n以及特点位置p,请返回旋转后的结果。**



1 #include <stdio.h>
2
3 int main()
4 {
5 char a[] = “asdfgh”,b[10];
6 int n = 3,j = 0,i;
7 for(i = n;a[i]!=‘\0’;i++)
8 {
9 b[j] = a[i];
10 j++;
11 }
12 for(i = 0;i<n;i++)
13 {
14 b[j] = a[i];
15 j++;
16 }
17 b[j] = 0;
18 printf(“%s\n”,b);
19
20 return 0;
21 }


##  **10.strcpy函数的实现**


**原型:**



1 #include <stdio.h>
2 #include <string.h>
3
4 int main()
5 {
6 char a[] = “********”;
7 char b[] = “asdf”;
8 strcpy(a,b);
9 printf(“%s\n”,a);
10
11 return 0;
12 }


strcpy的底层实现:



1 #include <stdio.h>
2 #include <string.h>
3
4 void Strcpy(char *a,char *b)
5 {
6 while(*b == ‘\0’)
7 {
8 *a = *b;
9 *a++;
10 *b++;
11 }
12 *a = *b;
13 }
14
15 int main()
16 {
17 char a[] = “********”;
18 char b[] = “asdf”;
19 strcpy(a,b);
20 printf(“%s\n”,a);
21
22 return 0;
23 }


## **11.strcmp函数的实现**


原型:


参数:`str1` – 要进行比较的第一个字符串。`str2` – 要进行比较的第二个字符串。


返回值:(比较指定的ASCII值) 如果 `str1 < str2`。返回值`<` 0,如果 `str2 > str1`。返回值`>` 0,如果 `str1 = str2`,返回值 `=` 0



1 #include <stdio.h>
2 #include <string.h>
3
5 int main()
6 {
7 char a[] = “asdf”;
8 char b[] = “asdf”;
9 char c[] = “asd”;
10 int i = strcmp(a,b);
11 printf(“%d\n”,i);
12
13 return 0;
14 }


底层实现:



1 #include <stdio.h>
2 #include <string.h>
3
4 int strcmp(char *a,char *b)
5 {
6 while(*a == *b)
7 {
8 if(*a == ‘\0’)
9 {
10 return 0;
11 }
12 *a++;
13 *b++;
14 }
15 if(*a > *b)
16 {
17 return 1;
18
19 }else if(*a < *b){
20
21 return -1;
22 }
23
24 return 0;
25 }
26
27 int main()
28 {
29 char a[] = “asdf”;
30 char b[] = “asdf”;
31 char c[] = “asd”;
32 int i = strcmp(a,b);
33 printf(“%d\n”,i);
34
35 return 0;
36 }


## **12.strlen函数的实现**


原型:



1 #include <stdio.h>
2 #include <string.h>
3
4 int main()
5 {
6 char a[] = “asdfg”;
7 int i = strlen(a);
8 printf(“%d\n”,i);
9
10 return 0;
11 }



1 #include <stdio.h>
2
3 int Strlen(char *a)
4 {
5 int i = 0;
6 while(*a != ‘\0’)
7 {
8 *a++;
9 i++;
10 }
11
12 return i;
13 }
14
15 int main()
16 {
17 char a[] = “asdfg”;
18 int i = Strlen(a);
19 printf(“%d\n”,i);
20
21 return 0;
22 }


## **13.strcat函数的实现**


**原型:**



1 #include <stdio.h>
2 #include <string.h>
3
4 int main()
5 {
6 char a[] = “asdfg”;
7 char b[] = “zxcvb”;
8 strcat(a,b);
9 printf(“%s\n”,a);
10
11 return 0;
12 }



1 #include <stdio.h>
2 #include <string.h>
3
4 void Strcat(char *a,char *b)
5 {
6 while(*a != ‘\0’)
7 {
8 *a++;
9 }
10 while(*b != ‘\0’)
11 {
12 *a = *b;
13 *a++;
14 *b++;
15 }
16 *a = ‘\0’;
17 }
18
19 int main()
20 {
21 char a[100] = “asdfg”;
22 char b[] = “zxcvb”;
23 Strcat(a,b);
24 printf(“%s\n”,a);
25
26 return 0;
27 }


## **14.字符串替换空格**


实现函数,把[字符串]( )中的空格替换为"%20"


例如:把字符串"We are like study.“中的空格全都替换为”%20",替换之后字符串就变为了"We%20are%20like%20study."


https://blog.csdn.net/dangzhangjing97/article/details/83956567



1 #include <stdio.h>
2 #include <string.h>
3
4 int main()
5 {
6 int i = 0,a = 0,b = 0,c = 0;
7 char arr[] = “We are like study”;
8 while(arr[i] != ‘\0’)
9 {
10 if(arr[i] == ’ ')
11 {
12 a++;
13 }
14 else
15 {
16 b++;
17 }
18 i++;
19 }
20 c = b + (2 * a);
21
22 while(b>=0)
23 {
24 if(arr[b] == ’ ')
25 {
26 arr[c–] = ‘0’;
27 arr[c–] = ‘2’;
28 arr[c–] = ‘%’;
29 }
30 else
31 {
32 arr[c–] = arr[b];
33 }
34 b–;
35 }
36 printf(“%s\n”,arr);
37
38 return 0;
39 }


**C++实现:**


扫描字符串,遇见空格时将空格替换为0,并在该位置前面插入%2。本方法用到了字符串的[insert]( )函数。insert函数插入会将其余字符串后移。所以时间复杂度是O(n2)。



1 #include
2 #include
3 using namespace std;
4
5 class node{
6 public:
7 string replace(string s){
8 string str = “%2”;
9 for(int i = 0;i<s.size();i++){
10 if(s[i] == ’ '){
11 s[i] = ‘0’;
12 s.insert(i,str);
13 }
14 }
15 return s;
16 }
17 };
18
19 int main() {
20
21 node n;
22 string s = “We are happy”;
23 cout << n.replace(s) << endl;
24
25 return 0;
26 }


先扫描一遍字符串,记录下有多少个空格,然后对字符串扩容,长度为将空格替换为%20后的长度。然后定义两个指针i,j。i从旧字符串末尾开始左移,j从新字符串末尾开始左移。没有遇见空格,就执行s[j]=s[i];遇见空格将连着的三个位置分别赋予0,2,%。如果j=i了,说明已经没有空格,j前面的字符串不必再赋予,时间复杂度是O(n)。



1 #include
2 #include
3 using namespace std;
4
5 class node{
6 public:
7 string replace(string s){
8 int oldlen = s.size(),cout = 0;
9 for(int i = 0;i<s.size();i++){
10 if(s[i] == ’ ') cout++;
11 }
12 s.resize(s.size()+2*cout);
13 int newlen = s.size();
14 for(int i = oldlen-1,j = newlen-1;i<j;i–,j–){
15 if(s[i] != ’ ') s[j] = s[i];
16 else{
17 s[j] = ‘0’;
18 s[–j] = ‘2’;
19 s[–j] = ‘%’;
20 }
21 }
22 return s;
23 }
24 };
25
26 int main() {
27
28 node n;

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

366384)]

[外链图片转存中…(img-WHKJm8yE-1715716366385)]

[外链图片转存中…(img-Oa1UcMeY-1715716366386)]

[外链图片转存中…(img-ewMd3Pw5-1715716366387)]

[外链图片转存中…(img-CUlIbs2B-1715716366387)]

[外链图片转存中…(img-bi4hBaag-1715716366388)]

[外链图片转存中…(img-H3rbshKJ-1715716366388)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值