遇到过的一个面试题
题目
用c语言写一个函数,把字符串里面的空格全部去掉,并返回删除的空格的个数,不允许新开辟空间,只能申请简单类型的自动变量。时间复杂度O(n)
#include <iostream>
#include <string>
using namespace std;
int del_blanks(char * str)
{
if (str == nullptr) {
return 0;
}
int res = 0;
char *l = str;
char *r = str;
while (*(l + res) != '\0') {
while (*r != '\0' && *r == ' ') {
r++; // 遇到了空格 右指针 提前跳过
res++;
}
*l = *r;
l++;
r++;
}
*l = '\0';
cout << str << endl;
return res;
}
int main() {
string a = "I am a worker";
//cout << a << endl;
//del_blanks(const_cast<char*>(a.c_str()));
char b[] = "I am a worker";
cout << del_blanks(b) << endl;
//test(a);
return 0;
}
这个问题其实没啥难度, 不过要比较心细
一开始我用:
char *b= "I am a worker";
进行字符指针测试, 结果程序老是挂断, 然后改用字符数组:
char b[] = "I am a worker";
程序就ok了.
还是太久没写存c的程序了,生疏了
char *b= "I am a worker";
这种方式的初始化方式会生成一个未命名的静态字符数组,这个未命名的数组可以存储在只读内存中,不能进行修改.