最近在找暑期实习,投了不少公司,手头还有仨项目。所以更新的大多偏向算法题和嵌入式软件相关的八股,电子电路模电数电啥的也会复习一些(因为也投了少量的机电和嵌入式硬件岗),重在查漏补缺。
不过硬件方面,最近也在新学东西,ROS小车,运动控制算法,电机控制什么的。所以也有新知识的更迭,之前一段时间边找实习边焦虑,现在边找实习边复习+学习,主要因为项目那边催的也紧。
话不多说,进入正题。
break和continue区别:
1.break:直接结束循环,跳出外层循环体。(但如果在switch语句中使用,只是跳出该switch语句体,并不能中止循环体的执行。)
2.continue:进入下一次循环,无法在switch语句中使用,无法直接结束循环。只能在各循环语句中使用
数组指针和指针数组
int *a[10];//指针数组,其本质是数组,里面存储了十个指针
int (*a)[10];//数组指针,其本质是指针,是一个指向了十个整型数数组的指针
C++让程序窗口停留:
system("pause");
字符串翻转
真的很常考!昨晚的tesla公开笔试第一题就是字符串翻转,leetcode 上也有相关的题目。
字符串的其余操作也很常考,tesla笔试的第二题也是字符串相关。除此之外,百度的暑期实习笔试也有与此类似的题目(没错就是归零那道题)
先写一下基本的字符串翻转算法:(用双指针的方式,需要考虑字符串为空或者为NULL的情况)
#include <iostream>
using namespace std;
char *Reverse (char *str) {
if (str == reinterpret_cast<char*>(NULL)|| str == reinterpret_cast<char*>('\0')) {
return str;
}//其实原先是if (str == NULL|| str == '\0')但是新版c++会因为int和char之间转换不好而报错,所以需要用这个来强制转换
//char这个是数组指针
char(*start) = str;
char(*end) = str;
while (*end != '\0') {
end++;
}
char temp;
--end;//去除'\0'
while (start < end) {
temp = *start;//中间存储一下
*start = *end;
*end = temp;
start++;
end--;
}
return str;
}
int main()
{
char str[] = "h appy";
cout << Reverse(str) << endl;
return 0;
}
当然也可以直接使用reverse函数(这也是我昨晚用的方法,不知道为什么只有部分通过,大概是因为昨晚自己没有判定NULL和空字符串吧,但这个强制转换也不好用。
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "we rty";
reverse(str.begin(), str.end());
cout << str << endl;
return 0;
}
字符串翻转(升级版)
这次的字符串翻转需要比之前的复杂一些,不翻转单词本身,而是把"I am happy"这样的字符串翻转成"happy am I"。对于这样的字符串翻转题目,我们可以把每个单词当作一个大型的字符,之后将所有字符顺序进行翻转。
#include <iostream>
using namespace std;
// 扩展版反转
/*
1.定义两个指针,分别指向一个单词的开头和结尾地址
2.先整体反转
3.然后以空格为单词结束标志分别反转
*/
char* Reverse(char* str) {
if (str == reinterpret_cast<char*>(NULL) || str == reinterpret_cast<char*>('\0')) {
return str;
}
//char这个是数组指针
char(*start) = str;
char(*end) = str;
while (*end != '\0') {
end++;
}
char temp;
--end;//去除'\0'
while (start < end) {
temp = *start;//中间存储一下
*start = *end;
*end = temp;
start++;
end--;
}
return str;
}
char* strReverseEx(char* str) {
// 判断字符是否为null或是空字符串
if (str == reinterpret_cast<char*>(NULL) || str == reinterpret_cast < char*>('\0')) {
return str;
}
// 先整体反转
Reverse(str);
// 定义char数组指针
char* start = str;
char* end = str;
while (true)
{ // 然后根据空格分单词反转
if (*end == ' ')
{
*end = '\0';
Reverse(start);
*end = ' ';
start = end + 1;
}
// *end=='\0',说明到了字符串结尾
if (*end == '\0')
{
Reverse(start);
break;
}
end++;
}
return str;
}
int main(void) {
char str[] = "I am happy";
cout << strReverseEx(str) << endl;
system("pause");
return 0;
}