给定一个字符串比如“abcdef”,要求写个函数编程“defabc”,位数是可变的。

原创 2013年12月03日 12:24:04

第一眼看到这题,脑海中想到strcpy.

于是第一次实践如下:

#include 
using namespace std;

enum ResultState
{
	FAIL = -1,
	SUCC
};
int halfInverse(char* pSrc)
{
	if (NULL == pSrc)
	{
		return FAIL;
	}
	int iLength = strlen(pSrc);
	char* pTep = new char[iLength + 1]();
	pTep[iLength] = '\0';
	strncpy(pTep, pSrc + iLength/2, iLength/2);
	strncpy(pTep + iLength/2, pSrc, iLength/2);
	strcpy(pSrc, pTep);
	return SUCC;
}

void myPrint(char* pSrc)
{
	if (NULL == pSrc)
	{
		return;
	}
	int iLen = strlen(pSrc);
	for (int i=0; i


上述代码可以在VS2010 编译并运行通过。

仔细想想,在函数halfInverse里面申请了一段内存,这段内存可以不像原来的一样大,只要一半就可以了。

于是又有了第二次实践:

#include 
using namespace std;

enum ResultState
{
	FAIL = -1,
	SUCC
};
int halfInverse(char* pSrc)
{
	if (NULL == pSrc)
	{
		return FAIL;
	}
	int iLength = strlen(pSrc)/2;
	char* pTep = new char[iLength + 1]();
	pTep[iLength] = '\0';
	strncpy(pTep, pSrc, iLength);
	memcpy(pSrc, pSrc+iLength, iLength);
	strncpy(pSrc+iLength, pTep, iLength);
	return SUCC;
}

void myPrint(char* pSrc)
{
	if (NULL == pSrc)
	{
		return;
	}
	int iLen = strlen(pSrc);
	for (int i=0; i

照样可以实现相应的功能,新申请的内存少了一半。但是里面有了strncpy memcpy这样的耗费时间的函数,第二在想想是否可以不要借助这个新申请的内存。

看看前半部分和后半部分的字符相隔一定距离,a 和 d 相隔3个字符, b 和 e 相隔3个字符, c和f 相隔 3 个字符,都是字符串长度的一半。

然后又有了第三次实践:


#include 
using namespace std;

enum ResultState
{
	FAIL = -1,
	SUCC
};
int halfInverse(char* pSrc)
{
	if (NULL == pSrc)
	{
		return FAIL;
	}
	int iLen = strlen(pSrc)/2;
	char cTmp = '\0';
	for (int i=0; i

 这样一来就不用额外申请空间了。

一个小程序整整反映了自己的思考过程,也反映了自己的思考缺陷,需要慢慢改进啊。






写一个字符串反转函数,输入 abcdef 转换成 edcba

没写什么特别有意义的东西,就随便做做笔记。

【微软100题】定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。 如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。

package test; /** * 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。 如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。 ...

Oracle日期、字符串格式化函数,位数不足前面加0,一位数字显示两位,格式化数字为定长

格式化函数 函数 返回类型 描述 例子 to_char(timestamp, text) text 把时间戳转换成字串 to_char(current_ti...
  • bear_79
  • bear_79
  • 2016年01月28日 16:14
  • 372

Oracle日期、字符串格式化函数,位数不足前面加0,一位数字显示两位,格式化数字为定长

格式化函数 函数 返回类型 描述 例子 to_char(timestamp, text) text 把时间戳转换成字串 to_char(current_timestamp, 'HH12:...

编程判断一个实数(任何位数)是否为0.5的整数倍

如果用double 则 位数大于12后就不准确了  因此用 字符串比较合适  代码简单 不多说: # include int gainchar(char *a,int max);//输入数字 保存在...

递归 --变位数 --字符串相关

java数据结构和算法中文第二版   Common.java package com.util; import java.io.BufferedReader; import java...
  • cai5
  • cai5
  • 2012年03月31日 11:55
  • 519

要把ABCDEF当成数字看—成为计算机编程高手必需具备的能力

有的时候,我们看问题的时候,并不是解决不了问题,而因为我们对问题并没有达到实际上环境所要求的熟悉成度。常常遇到问题后,还是要去思考后才会有肯定的答案。不要小看这么一点点的小问题,这很有可能就是你成功的...

输入一个字节内的数(0-255)和移动位数.输出移位结果(要求循环移位)

//1.输入一个字节内的数(0-255),然后将该数的转换为二进制数,然后将高四位和第四位互换 // int a = 0; // printf("请输入一个(0-255)字节内的的数:\n...
  • MHTios
  • MHTios
  • 2014年08月05日 15:41
  • 1393

编程题--给定一个字符串数组,判断每个字符出现次数

题目要求:给定一个字符串数组,判断每个字符出现多少次? 解决思路:利用Map的特性:即Map集合中如果两个key(键)值是一样相同的,那么,后放(put)入的值会将前面存在的value(值)替换掉,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:给定一个字符串比如“abcdef”,要求写个函数编程“defabc”,位数是可变的。
举报原因:
原因补充:

(最多只允许输入30个字)