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

4 篇文章 0 订阅

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

如输入:"  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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值