C/C++函数返回值为指针时(2016美团模拟笔试)

来源:互联网 发布:乐乎公寓公益西桥 编辑:程序博客网 时间:2024/05/20 10:52

昨天美团模拟笔试,最后一个编程题:输入一个字符串,删去多余空格

如输入:"  I love   China   !  "
    输出:"I love China !"
题目给了一个函数框架:
char* getString(char * sourceString)
{//待填充}


按理说这题并不难,个人感觉重点就在于返回值怎么确定。

1)如果队员指针进行处理,直接返回当然是没有问题的咯。

      只是在删除空格之后的操作相对复杂一点。

2)在函数内部声明一个新指针,然后返回。

       那么问题就出来了: 

      a 最简单最不过大脑的办法就是
          char a[10]; 完成操作后最后 return a;

          获取可以得到正确结果,那是因为指针指向的内存暂时没有其他用处。

          函数体中声明的为局部变量,在函数运行后会被自动撤回,这种方法是错误的

      b 其实我们可以在函数体内部通过动态申请(malloc/new)
          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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 中央庭黑盒被抢怎么办 lab值a值偏高怎么办 橱房管道堵死了怎么办 微信被别的手机同步登录怎么办 计算机机房空调坏了怎么办 被蝎子蛰了怎么办怎么处理? 月嫂走了孩子闹怎么办 转业军人自建房有困难怎么办 转业军人没配偶想异地安置怎么办 转业军人档案和身份证不符怎么办 转业军人个人资被单位遗失怎么办 空军飞行学员停飞后怎么办 2020年不脱贫的农户怎么办 马自达8停产后配件怎么办 钢铁雄心3没将领怎么办 江苏低于二本线怎么办 电工证快过期了怎么办 天正建筑打不开高版本的图纸怎么办 打开天正只显示cad怎么办 天正软件显示过期了怎么办 四岁宝宝经常吐怎么办 穿越火线登陆不上去怎么办 猫猫呕吐带血怎么办 狗又吐又拉稀怎么办 狗狗肠炎拉血怎么办 拉大便有血怎么办呢 工作中遇到不公待遇怎么办 老兵丢了退伍证怎么办 我的退伍证丢了怎么办 退伍证丢了怎么办啊 银行卡更换之前的卡号怎么办 收到联通欠费催款律师函怎么办 苹果5s玩王者卡怎么办 电信宽带包年用户欠费怎么办 员工不处理考勤异常怎么办 移动号码特殊原因强制停机怎么办 下雨天我怎么办我好想你 免检标志领晚了怎么办 激光点太田痣揉搓了泛红怎么办 花束与衣服颜色相称怎么办 吃鸡狙击枪距离怎么办