C/C++函数返回值为指针时(2016美团模拟笔试)
来源:互联网 发布:乐乎公寓公益西桥 编辑:程序博客网 时间:2024/05/20 10:52
昨天美团模拟笔试,最后一个编程题:输入一个字符串,删去多余空格
如输入:" I love China ! "输出:"I love China !"
题目给了一个函数框架:
char* getString(char * sourceString)
{//待填充}
按理说这题并不难,个人感觉重点就在于返回值怎么确定。
1)如果队员指针进行处理,直接返回当然是没有问题的咯。
只是在删除空格之后的操作相对复杂一点。
2)在函数内部声明一个新指针,然后返回。
那么问题就出来了:
char a[10]; 完成操作后最后 return a;
获取可以得到正确结果,那是因为指针指向的内存暂时没有其他用处。
函数体中声明的为局部变量,在函数运行后会被自动撤回,这种方法是错误的。
char *a = (char*)malloc(size_t); 操作之后在return a;
切记这里a最终是要释放的,我们可以在调用该函数的函数体中free/delete。
鄙人写了一段代码,欢迎吐槽及纠错:
#include <iostream>using namespace std;char *getString(char * sourceString){if(NULL == sourceString){return NULL;}int length = strlen(sourceString);//length = sizeof(sourceString); 这里得到的长度是4,是指针的长度char *a = (char *)malloc(sizeof(char)*length);int flag = 1; //避免第一个出现空格的情况int count = 0;while(length > 0){if(' ' == *sourceString){if(0 == flag){*(a + count) = *sourceString;count++;}flag = 1;}else{*(a + count) = *sourceString;count++;flag = 0;}sourceString++;length--;}//处理最后一个空格,并在结尾加上结束符if(' ' == *(a + count - 1)) {*(a + count - 1) = '\0';}else{*(a + count) = '\0';}return a;}int main(){char a[20] = " i love china ";//int len = strlen(a); 这里得到的长度是14。//len = sizeof(a); 这里得到的长度是20。char *b;b = getString(a);cout << strlen(b) << endl;cout << b << endl;if(NULL != b){free(b);}system("pause");return 0;}
0 0
- C/C++函数返回值为指针时(2016美团模拟笔试)
- 返回值为C/C++函数指针的函数
- C:返回值为指针的函数解读
- C语言函数返回值为指针和函数返回值为void
- c函数返回指针
- C函数返回指针
- c函数返回指针
- c函数返回指针
- 【C++】指针作为函数的返回值
- C语言指针作为函数返回值
- C返回指针的函数
- C++---从函数返回指针
- C/C++之函数返回值为指针或者是引用时常见错误总结
- C语言函数返回类型为指针时的一些问题
- C语言函数返回类型为指针时的一些问题
- C语言函数返回类型为指针时的一些问题
- C语言函数返回类型为指针时的四个问题
- C语言函数返回类型为指针时的一些问题
- gdb断点删除
- Java常用名词
- Java源码分析:深入探讨Iterator模式
- Windows系统版本宏_WIN32_WINNT对应值
- CPU 占用过高 (查看Java堆)
- C/C++函数返回值为指针时(2016美团模拟笔试)
- CuteFTP试用期后继续免费使用
- AC/DC电源的设计原理
- 解决Adb connection Error:远程主机强迫关闭了一个现有的连接。 Connection attempts: 1 真机没有连接得最后方法
- Android:ContentProvider
- 不吃苦,你要青春干嘛
- 关于使用zepto框架中的tap click穿透事件 webapp开发
- 2.1 从链表中移除重复结点
- 2015-0908-osg学习历程7