字符串
leoufung
Linux Kernel,Virtualization
展开
-
字符串的替换所有指定的子串 -- C语言
需求用户输入3个字符串,然后把在第一个字符串中出现的所有第 2 个字符串替换成第 3 个字符串,最后输出新的字符串。思路使用strstr逐个寻找子串,然后替换;替换的时候分为几步:1. 将sub后面的内容向前或向前移动(因为replace可能大于sub也可能小于sub,所以可能向前复制或者向后复制),腾出空间2. 把replace拷贝到腾出的空间中。3. 循环指针p移...原创 2020-02-27 16:08:46 · 12463 阅读 · 3 评论 -
找出01字符串中0和1连续出现的最大次数 -- C语言
思路逐个遍历字符串,如果发现0,遍历0之后的子串,查找子串中连续出现0的数字,如果超过原有最大值,更新最大值。如果发现1,做同样处理代码实现int getStrMaxSuccNum(char * str, int * pnum0, int * pnum1){ if(NULL == str){ printf("mystrcat param error\n"); retu...原创 2020-02-27 14:24:28 · 909 阅读 · 0 评论 -
计算中文字符串的长度 -- C语言
思路计算 含有 汉字 的 字符串 的 长度, 汉字 作为 一个 字符 处理; 已知: 汉字编码 为 双 字节, 其中 首 字节< 0, 尾 字节 在 0 ~ 63 以外( 如果 一个 字节 是 − 128 ~ 127)。注意:每个系统实现的编码机制不是很一样,在我的机器上,按照的是centos7,汉子的编码是3个字节,所以发现汉字之后,指针应该从当前位置向后移动三个字节,即 p =...原创 2020-02-27 12:51:42 · 6286 阅读 · 2 评论 -
实现strcat库函数 -- C语言
思路找到第一个字符串'\0'位置p,然后把第二个字符串复制到p开始的位置代码实现char * mystrcat(char * str1, char * str2){ if(NULL == str1 || NULL == str2){ printf("mystrcat param error\n"); return NULL; } int len1 = strle...原创 2020-02-27 12:00:13 · 200 阅读 · 0 评论 -
从字符串里面删除所有指定的字符 -- C语言
思路遍历字符串,发现相同的,就用下一个字符开始的子串向前一个覆盖,记录删除的字符个数k,然后记得在 len - k (最后的一个向后一个位置)的地方标记 '\0'代码实现int strRemoveSpecChar(char * str, const char c){ if(NULL == str){ printf("strRemoveSpecChar param error\n...原创 2020-02-26 20:35:13 · 6286 阅读 · 0 评论 -
排序字符串前半部分 -- C语言
需求对字符串前半部分排序,如果长度是技术,则中间的字符不变代码实现int sortHalfStr(char * str){ if(NULL == str){ printf("strSortSwap param error\n"); return PARAM_ERR; } int len = strlen(str); int i = 0, j = 0, sz...原创 2020-02-26 20:03:23 · 252 阅读 · 0 评论 -
删除指定长度的子字符串 -- C语言
需求描述假设 一个 字符串 "abcdefg", 如 要从 第二个 开始( 索引 为 1), 删除 两个 字符, 则删除 后的 字符串 是" adefg"。代码实现int removeSubString(char * str, int index, int size){ if(NULL == str || index < 0 || size < 0){ pri...原创 2020-02-26 19:20:23 · 839 阅读 · 0 评论 -
字符串的循环右移 -- C语言
代码实现int rightShiftStr(char * str, int n){ if(NULL == str){ printf("addBigInt param error\n"); return PARAM_ERR; } int len = strlen(str); if(n > len){ printf("addBigInt param error2\n"...原创 2020-02-26 19:05:01 · 630 阅读 · 0 评论 -
实现两个超大整数相加 -- C语言
思路从后向前处理,逐个相加,记录进位Carrer;注意到头的结束条件是 str -1,因为字符串的头本身也要处理,结束条件是头前面的一个指针地址;最后如果有更长的一个数字,将其剩下的部分加Carrer,补充到前面。最前面一个处理,C可能为1,我们一般多留一位,如果C为0,那么整个字符串前移一位,结尾提前一位写入'\0'代码实现int addBigInt(char * str1, c...原创 2020-02-26 17:23:55 · 4044 阅读 · 1 评论 -
字符串编码 -- C语言
编码规则Give an implementation of encoding a string which contains less than 20 chars. There threerules:1. replace the alphabetical char in the string with the fourth char behind it, for example, a -&...原创 2020-02-26 14:10:20 · 1108 阅读 · 0 评论 -
字符串中的连续字符统,并将统计数字插入到原有字符串中 -- C语言
题目需要在字符串中插入字符统计的个数。 例如字符串 aaabc, 插入字符个数后变成 aaa3b1c1代码实现int statStr(char * str){ if(NULL == str){ printf("statStr param error\n"); return PARAM_ERR; } int len = strlen(str) + 1; /*加上 ...原创 2020-02-26 12:56:26 · 413 阅读 · 0 评论 -
将一个正整数用十六进制和二进制的字符串输出 -- C语言
思路base 是要转换的基树, n % base 拿到的数就是改进制的最低位,缓存起来;然后通过 n / base 来处理下一位并存入缓存;别忘了在最后加上'\0',缓存中的数字和原来是相反的,所以需要反转过来后复制到结果中,但是注意,复制的长度是 len + 1,因为要复制 '\0'代码实现static char hexMetric[16] = { \ '0', '1', '2'...原创 2020-02-25 20:54:37 · 540 阅读 · 0 评论 -
查找两个字符串中最大公共子串 -- C语言
思路分别遍历两个字符串,一个是外循环,一个是内循环,当内、外循环发现有相同的字符的时候,从当前位置开始匹配common子串,并记录长度,如果长度大于max,则更新最长的公共子串;最后用memcpy将找到的最长公共子串拷贝到返回结果的字符串中,记得最后要加上'\0'代码实现char * commonStr(const char * str1, const char * str2){ ...原创 2020-02-25 19:58:21 · 971 阅读 · 0 评论 -
实现strcmp函数 -- C语言
代码实现int mystrcmp(char * str1, char * str2){ char * p = str1; char * q = str2; int len1 = strlen(str1); int len2 = strlen(str2); if(len1 > len2){ return -1; } else if (len1 < len2){...原创 2020-02-25 18:16:25 · 380 阅读 · 0 评论 -
判断是否是回文串 -- C语言
思路首尾对着遍历字符串,发现不相等就返回false代码实现bool isPalindromeStr(char * str){ if(NULL == str){ printf("isPalindromeStr param error!\n"); return false; } bool flag = true; char * head = str; char *...原创 2020-02-25 16:50:22 · 291 阅读 · 0 评论 -
反转字符串,但指定的子串不翻转 -- C语言
原理首先把整个字符串反转过来,然后用查找子串的函数找到子串,再翻转回来代码实现char * mystrstr(char * str, char * sub){ if(NULL == str || NULL == sub){ printf("mystrstr param error\n"); return NULL; } char * p = NULL, * q = N...原创 2020-02-25 15:16:44 · 406 阅读 · 0 评论 -
整个字符串反转 -- C语言
思路找到字符串头和尾,整个互换位置代码实现int strReverse(char * head, char * tail){ if(NULL == head || NULL == tail){ printf("strReverse param error!\n"); return PARAM_ERR; } char tmp; while(head < ta...原创 2020-02-25 14:48:54 · 188 阅读 · 0 评论 -
字符串各单词的反转 -- C语言
思路我们首先把字符串整个反转,然后在逐个单词反转回来,每个单词通过空格' '分隔开代码实现int strReverse(char * head, char * tail){ if(NULL == head || NULL == tail){ printf("strReverse param error!\n"); return PARAM_ERR; } ch...原创 2020-02-25 14:29:00 · 1484 阅读 · 0 评论 -
字符串中子串的查找 -- C语言
思路使用两个循环,外循环遍历主串,内循环遍历查找串,主串一个字符一个字符的后移,分别和查找串进行批评,找到了就返回代码实现char * mystrstr(char * str, char * sub){ if(NULL == str || NULL == sub){ printf("mystrstr param error\n"); return NULL; }...原创 2020-02-24 20:25:05 · 5848 阅读 · 0 评论 -
计算字符串长度 -- C语言
代码实现int mystrlen(char * str){ if(NULL == str){ printf("mystrcpy param error\n"); return 0; } char * c = NULL; int len = 0; c = str; while(*c++ != '\0'){ len++; } return len;}voi...原创 2020-02-24 19:30:04 · 492 阅读 · 0 评论 -
实现memcpy函数 -- C语言
思路这个函数的实现很简单,只要将原内存中的数据逐个复制到目标内存中,使用char进行复制步长最简单,当然,你也可以按照其他长度复制内容。内存是连续的,没有结束,所以不要用 NULL判断,应该用size做判断。注意编程规范和出入参校验。返回值用void * 是为了链式编程使用。废话不多说了,看代码。代码实现void * mymemcpy(void * dst, void * src, ...原创 2020-02-24 18:32:49 · 429 阅读 · 0 评论 -
实现strcpy函数 -- C语言
代码实现int mystrcpy(char * dst, char * src){ if(NULL == dst || NULL == src){ printf("mystrcpy param error\n"); return PARAM_ERR; } char * p = NULL, * q = NULL; p = dst; q = src; while(*q...原创 2020-02-24 18:05:32 · 328 阅读 · 0 评论 -
利用客户函数将字符串转换为数字 -- C语言
思路C/ C++ 提供 了 几个 标准 库 函数, 可以 将 字符串 转换 为 任意 类型( 整型、 长整型、 浮点 型 等) 的 数字。下面 列举 了 各 函数 的 方法 及其 说明。atof(): 将 字符串 转换 为 双 精度 浮点 型 值。atoi(): 将 字符串 转换 为 整型 值。atol(): 将 字符串 转换 为 长整型 值。strtod(): 将 字符串...原创 2020-02-24 17:10:10 · 182 阅读 · 0 评论 -
不是用库函数将字符串转换为整数 -- C语言
代码实现int str2int(char * str, int * rst){ if(NULL == str){ printf("int2str param error\n"); } int num = 0, n = 0, i = 0, k = 0, digit = 0, len = 0; int negative = 0; len = strlen(str); for...原创 2020-02-24 16:25:42 · 249 阅读 · 0 评论 -
不用库函数将整数转换为字符串 -- C语言
思路把整数的按位取出来,放到一个buf里面,但是这时候是反序的,然后再反过来从buf里面拷贝到目标字符串中,如果有符号,目标第一个字符为符号位代码实现int int2str(char * str, int num){ if(NULL == str){ printf("int2str param error\n"); return PARAM_ERR; } int n...原创 2020-02-24 14:57:53 · 1049 阅读 · 0 评论 -
用库函数将数字转换为字符串 -- C语言
说明C 语言 提供 了 几个 标准 库 函数, 可以 将 任意 类型( 整型、 长整型、 浮点 型 等) 的 数字 转换 为 字符串。 下面 列举 了 各 函数 的 方法 及其 说明。itoa(): 将 整型 值 转换 为 字符串。ltoa(): 将 长整型 值 转换 为 字符串。ultoa(): 将 无符号 长整型 值 转换 为 字符串。gcvt(): 将 浮点 型 数 转换...原创 2020-02-24 13:48:46 · 1042 阅读 · 0 评论