随笔分类 -  String

摘要:自己写一个函数实现类似库函数itoa的功能,将整数转化为字符串。整数转汉字,表示货币量。1、代码: 1 char *IntToStr(int num, char str[]) 2 { 3 int i = 0, j = 0; 4 char temp[100]; 5 while(num) 6 { 7 temp[i] = num % 10 + '0'; //取模运算得到从后往前的每一个数字变成字符 8 num = num / 10; 9 i++;10 }11 temp[i] = 0; //字符串... 阅读全文

posted @ 2013-06-08 20:28 月moon鸟 阅读(761) 评论(0) 推荐(0)

摘要:不使用atoi类似的库函数,将字符串转换为整形。写一个把字符串的IP地址变成32位整数的函数。1、思路: 核心:num = num * 10 + (*str - '0')。但是要考虑诸多方面因素:1、str是否为NULL,或为空"";2、正负号问题;3、数字溢出或是可能不是0~9之间的字符。所以要设置相应的全局变量来标记异常情况,只有str为"0"时,才正常输出0。那么程序整个过程是先设置输出0和全局变量为false,只有没有异常,才输出数字并将全局变量设置为true。 1 enum Status {kValid = 0, kInvali 阅读全文

posted @ 2013-05-19 15:36 月moon鸟 阅读(493) 评论(0) 推荐(0)

摘要:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。实现一个算法打印出n对括号的有效组合。1、思路: 假设我们想在长度为n的字符串中求m个字符的组合。我们先从头扫描字符串的第一个字符。针对第一个字符,我们有两种选择:第一是把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符;第二是不把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选择m个字符。这两种选择都很容易用递归实现。 1 #include <iostream> 2 #include <vector> 3 4 u 阅读全文

posted @ 2013-04-22 11:30 月moon鸟 阅读(577) 评论(0) 推荐(0)

摘要:char* _strcpy(char* dest, const char* src){ assert(dest != NULL && src != NULL); if (dest == src) return dest; char* temp = dest; while ((*dest++ = *src++) != '\0'); return temp;}char* _strncpy(char* dest, const char* src, unsigned int n){ assert(dest != NULL && src != NULL). 阅读全文

posted @ 2013-04-16 21:49 月moon鸟 阅读(199) 评论(0) 推荐(0)

摘要:参考:http://zhedahht.blog.163.com/判断一个字串是否是回文。输入一个字符串,输出该字符串中最长的回文子字符串的长度。1、思路: 只要从两头开始同时向中间扫描字串,如果直到相遇两端的字符都一样,那么这个字串就是一个回文。我们只需要维护头部和尾部两个扫描指针即可;另一种方法是从中间开始、向两边扩展查看字符是否相等。2、思路: 遍历字符串,对每一个字符往两边扩展,看两侧的字符是否相同,这样时间复杂度是O(n2)。注意扩展时考虑奇数和偶数两种情况。GetLongestSymmetricalLength 1 int GetLongestSymmetricalLength_.. 阅读全文

posted @ 2013-04-16 20:38 月moon鸟 阅读(231) 评论(0) 推荐(0)

摘要:参考:http://zhedahht.blog.163.com/定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。1、思路: 我们首先对X和Y两段分别进行翻转操作,这样就能得到XTYT。接着再对XTYT进行翻转操作. 阅读全文

posted @ 2013-04-16 20:26 月moon鸟 阅读(226) 评论(0) 推荐(0)

摘要:参考:http://zhedahht.blog.163.com请实现一个函数,把字符串中的每个空格替换成%20。输入两个字符串,从第一个字符串中删除第二个字符串中的所有字符。1、思路: 两题遇到的问题都是无论是替换还是删除,都会导致之后的字符需要整体移动,如何在O(n)的时间复杂度下完成操作,往往需要两个指针。这题先遍历一遍记录下空格数,然后设置两个指针,一个指针指向替换成%20之后的末尾,一个指针指向原始字符串的末尾。两个指针同时往前移,并前指针的内容拷贝到后指针的位置。前指针遇到空格,后指针填充%20,然后两个指针继续往前移,终止条件是前指针和后指针重合。ReplaceBlank 1 v. 阅读全文

posted @ 2013-04-16 19:46 月moon鸟 阅读(291) 评论(0) 推荐(0)

摘要:输入一个字符串, 打印出该字符串中字符的所有排列。举个例子,123的全排列有123、132、213、231、312、321这六种。字符串全排列扩展----八皇后问题1、思路: 递归思路:全排列就是从第一个数起每一个数分别和他后面数做交换。当数组中有出现重复数字时,当出现之前交换过的数字就跳过,只交换不重复的数字。Permutation 1 #include 2 #include 3 4 using namespace std; 5 6 7 //从第一个数开始,分别与后面的数交换 8 void Permutation1(char* pStr, char* pBegin) 9 {10 ... 阅读全文

posted @ 2013-03-28 17:23 月moon鸟 阅读(337) 评论(0) 推荐(0)

摘要:输入数字n,按顺序打印出从1到最大的n位十进制。输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印出所有数字中最小的一个。大数相加和大数相乘。1、思路: 首先想到的方法必然是确定上限,比如n=3,上限是100。但是当n很大时,就算用long long也有可能溢出,所以考虑将数字转成字符处理。如果用字符来模拟加法操作,过程比较复杂。但是用数字全排列则能很好的解决问题,即各个位置上0~9都出现一遍。在打印的时候要注意,以0开头的字符不能打印出来。Print1ToMax 1 #include <stdio.h> 2 #include <string.h> 3 4 v 阅读全文

posted @ 2013-03-23 17:55 月moon鸟 阅读(245) 评论(0) 推荐(0)

导航