博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符串函数集
阅读量:4884 次
发布时间:2019-06-11

本文共 12928 字,大约阅读时间需要 43 分钟。

【1】字符数组的环形移动如何实现?

要求:函数原型如下:

void RightLoopMove(char *pstr, unsigned short steps)

参数1:char *pstr 表示需要移动的字符串

参数2:unsigned short steps 表示从第几个字符开始向右移动

返回值类型:void

示例代码如下:

1 #include
2 using namespace std; 3 4 int mystrlen(char* str) 5 { 6 int Length = 0; 7 if (NULL != str) 8 { 9 for (;*str++ != '\0';Length += 1);10 return Length;11 }12 return Length;13 }14 15 void RightLoopMove(char *pstr, unsigned short steps)16 {17 if (NULL == pstr)18 return;19 20 char tmp;21 int len = mystrlen(pstr);22 steps %= len;23 while (steps-- > 0)24 {25 tmp = *(pstr + len -1);26 for (int i = len - 2;i >= 0;--i)27 {28 pstr[i + 1] = pstr[i];29 }30 pstr[0] = tmp;31 }32 }33 34 void main()35 {36 char str[] = "abcdefghijklmn";37 RightLoopMove(str, 4);38 cout << str << endl; //klmnabcdefghij39 system("pause");40 }

【2】如何判断一个字符串是否是回文串?

要求:函数原型如下:

int  IsRevStr(char *str)

"回文数"是一种数字。如:98789, 这个数字正读是98789,倒读也是98789,正读倒读一样,所以这个数字就是回文数。

字符的以此类推.....

示例代码如下:

1 #include
2 using namespace std; 3 4 int mystrlen(const char *str) 5 { 6 int Length = 0; 7 if (NULL != str) 8 { 9 for (; *str++ != '\0'; Length++);10 return Length;11 }12 return Length;13 }14 15 int IsRevStr(char *str)16 {17 int i, len;18 int found = 1;19 if (NULL == str)20 {21 return -1;22 }23 24 len = mystrlen(str);25 for (i = 0; i < len/2; i++)26 {27 if (*(str + i) != *(str + len - i - 1))28 {29 found = 0;30 break;31 }32 }33 return found;34 }35 36 void main()37 {38 char *str1 = "abcdeedcba";39 char *str2 = "abfba";40 char *str3 = "liuyong";41 cout << IsRevStr(str1) << endl; // 142 cout << IsRevStr(str2) << endl; // 143 cout << IsRevStr(str3) << endl; // 044 system("pause");45 }

【3】如何把数字字符串转换为整型数据?

要求:函数原型如下:

int   str2int (const   char   *str);

示例代码如下:

1 #include
2 using namespace std; 3 4 int str2int(const char *str) 5 { 6 int temp = 0; 7 const char *ptr = str; // ptr保存str字符串开头 8 if (*str == '-'|| *str == '+') // 若第一个字符为符号位 9 {10 str++; // 前移一位11 }12 //转换为数据13 while (*str != 0)14 {15 if ((*str < '0') || (*str > '9'))16 {17 break;18 }19 temp = temp*10 + (*str - '0');20 str++;21 }22 //若为负数23 if (*ptr == '-')24 {25 temp = -temp;26 }27 return temp;28 }29 30 void main()31 {32 char *str1 = "-1234";33 char *str2 = "1234";34 int data1 = str2int(str1); 35 cout << data1 << endl; // -123436 int data2 = str2int(str2);37 cout << data2 << endl; // 123438 system("pause");39 }

【4】如何把整型数据转换为字符串?

要求:函数原型如下:

void  int2str(int data,char *str)

示例代码如下:

1 #include 
2 using namespace std; 3 4 void int2str(int data, char *str) 5 { 6 if (NULL == str) 7 { 8 return; 9 }10 11 char buf[10];12 int i = 0, len = 0;13 int temp = data < 0 ? -data : data; // temp为n的绝对值14 while (temp)15 {16 buf[i++] = (temp % 10) + '0'; // 把temp每一位上的数存入buf17 temp /= 10;18 }19 // data的位数加一20 buf[i] = '\0';21 len = data < 0 ? ++i : i;22 str[i] = '\0'; // 最末位置为‘0’23 while (1)24 {25 --i;26 if (buf[len - i - 1] == '\0')27 {28 break;29 }30 str[i] = buf[len - i - 1]; // 把buf内的字符拷到字符串31 }32 33 if (0 == i)34 {35 str[i] = '-'; // 如果是负数,添加一个负号36 }37 }38 39 void main()40 {41 int a = 1234;42 int b = -1234;43 char str1[10], str2[10];44 int2str(a, str1);45 int2str(b, str2);46 cout << str1 << endl; // 123447 cout << str2 << endl; // -123448 system("pause");49 }

【5】如何对字符串进行排序?

示例代码如下:

1 #include 
2 using namespace std; 3 4 int mystrlen(const char * str) 5 { 6 int Length = 0; 7 if (NULL != str) 8 { 9 for (; *str++ != '\0'; Length += 1);10 return Length;11 }12 return Length;13 }14 15 void strsort(char *str)16 {17 int i,j;18 int temp = 0;19 int num = mystrlen(str);20 for (i = 0; i < num; i++)21 {22 for (j = i + 1; j < num; j++)23 {24 if (str[i] > str[j])25 {26 temp = str[i];27 str[i] = str[j];28 str[j] = temp;29 }30 }31 }32 }33 34 void main()35 {36 char ch[] = "lkjhgfdsa";37 strsort(ch);38 cout << ch << endl; // adfghjkls39 system("pause");40 }

【6】如何把字符串中某个指定的字符删除?

要求:函数原型如下:

char * DeleChar(char *str,char c)

示例代码如下:

1 #include 
2 using namespace std; 3 4 char * DeleChar(char *str, char c) 5 { 6 char *head = NULL; 7 char *p = NULL; 8 if (NULL == str) 9 return NULL;10 head = p = str; // 指向字符串头,准备遍历11 while (*p)12 {13 if (*p != c)14 {15 *str++ = *p++;16 }17 else18 {19 ++p;20 }21 }22 *str = '\0';23 return head;24 }25 26 void main()27 {28 char ch[] = "agggbcabcsbddbf";29 DeleChar(ch, 'b');30 cout << ch << endl; // agggcacsddf31 system("pause");32 }

【7】如何找出01字符串中0与1出现的最大次数?

要求:函数原型如下:

void  Calculate(const char *str,int *max0,int *max1)

示例代码如下:

1 #include 
2 using namespace std; 3 4 void Calculate(const char *str, int *max0, int *max1) 5 { 6 int temp0 = 0; 7 int temp1 = 0; 8 while (*str) 9 {10 if (*str == '0')11 {12 (*max0)++;13 if (*(++str) == '1')14 {15 if (temp0 < *max0)16 {17 temp0 = *max0;18 }19 *max0 = 0;20 }21 }22 else if (*str == '1')23 {24 (*max1)++;25 if (*(++str) == '0')26 {27 if (temp1 < *max1)28 {29 temp1 = *max1;30 }31 *max1 = 0;32 }33 }34 }35 36 *max0 = temp0;37 *max1 = temp1; 38 }39 40 void main()41 {42 char string[] = "0101111111100000111";43 int max0 = 0;44 int max1 = 0;45 Calculate(string, &max0, &max1);46 cout << "max0:" << max0 << "max1:" << max1 << endl; // max0:5 max1:847 system("pause");48 }

【8】如何从字符串的某一个位置删除指定个数的字符?

函数原型如下:

char  *deleteChar(char *str,int pos,int len)

示例代码如下:

1 #include
2 using namespace std; 3 4 int mystrlen(const char * str) 5 { 6 int Length = 0; 7 if (NULL != str) 8 { 9 for(; *str++ != '\0'; Length++);10 return Length;11 }12 return Length;13 }14 15 char *deleteChar(char *str,int pos,int len)16 {17 char *p = str + pos - 1;18 int tt = mystrlen(str);19 if ((pos < 1) || (p - str) > tt) // pos不大于1 或者 pos不超出字符串的长度20 return str;21 if ((p + len - str) > tt) // len大于pos后剩余的个数22 {23 *p = '\0';24 return str;25 }26 while (*p && *(p + len)) // len小于或者等于剩余的个数27 {28 *p = *(p + len);29 p++;30 }31 *p = '\0';32 return str;33 }34 35 void main()36 {37 char delstr[] = "afdfjgkglkgdg";38 cout << "删除前字符串:" << delstr << endl;39 char *dest = deleteChar(delstr, 3, 4);40 cout << "从第三个字符位置,删除4个字符:" << endl;41 cout << "删除后字符串:" << dest << endl;42 system("pause");43 }44 45 // The result of this46 /*47 删除前字符串: afdfjgkglkgdg48 从第三个字符位置,删除4个字符:49 删除后字符串: afkglkgdg50 */

【9】写一个函数把字符串反转。

函数实现及测试程序代码如下:

1 #include 
2 #include
3 using namespace std; 4 5 // 字符串中每个字符的反转 6 char* strRev(const char *str) 7 { 8 char *pTmp = new char[strlen(str) + 1]; 9 strcpy(pTmp, str);10 char *ret = pTmp;11 char *p = pTmp + strlen(str) - 1;12 while (p > pTmp)13 {14 *p ^= *pTmp;15 *pTmp ^= *p;16 *p ^= *pTmp;17 --p;18 ++pTmp;19 }20 21 return ret;22 }23 24 void main()25 {26 char * str = "abcdef";27 cout << strRev(str) << endl; // fedcba28 system("pause");29 }

【10】写一个函数查找两个字符串中的第一个公共字符串

函数实现及测试程序代码如下:

1 #include 
2 using namespace std; 3 4 int strLen(const char *str) 5 { 6 int len = 0; 7 if (NULL != str) 8 { 9 while (*str++ != '\0')10 {11 len++;12 }13 return len;14 }15 return len;16 }17 18 // 两个字符串中的第一个公共子串19 char *commonstr(char *str1, char *str2)20 {21 int i, j, k;22 char *shortstr, *longstr;23 char *substr;24 if ((NULL == str1)||(NULL == str2))25 {26 return NULL;27 }28 29 if (strLen(str1) <= strLen(str2))30 {31 shortstr = str1;32 longstr = str2;33 }34 else35 {36 shortstr = str2;37 longstr = str1;38 }39 40 if (strstr(longstr, shortstr) != NULL)41 {42 return shortstr;43 }44 // 申请堆内存存放返回结果45 substr = (char *)malloc(sizeof(char)*(strLen(shortstr) + 1));46 i = strLen(shortstr) - 1; // i = 4 = 5 - 147 for (; i > 0;i--)48 {49 k = strLen(shortstr) - i; // k = 5 - i50 for (j = 0;j <= k;j++)51 {52 memcpy(substr, &shortstr[j], i);53 substr[i] = '\0'; 54 if (strstr(longstr, substr) != NULL) 55 {56 return substr;57 }58 }59 }60 61 return NULL;62 }63 64 void main()65 {66 char *pStr1 = "abcdefghijklmnopqrstuvwxyz";67 char *pStr2 = "asdghihgksdkmnohklukjlgsdjk";68 cout << commonstr(pStr1, pStr2) << endl; // ghi(第二个公共字符串:mno)69 system("pause");70 }

【11】写一个函数在字符串N中查找第一次出现子串M的位置。

函数实现以及测试程序代码如下:

1 #include 
2 using namespace std; 3 4 // 在字符串n中查找第一次出现子串m的位置 5 int StrStr(const char *src, const char *sub) 6 { 7 const char *bp; 8 const char *sp; 9 int nIndex = -1;10 if ((NULL == src)||(NULL == sub))11 {12 return nIndex;13 }14 15 nIndex = 0;16 while (*src)17 {18 bp = src;19 sp = sub;20 do21 {22 if (!*sp)23 {24 return nIndex;25 }26 } while (*bp++ == *sp++);27 28 ++src;29 ++nIndex;30 }31 32 return -1;33 }34 35 void main()36 {37 char *pStr = "abcdefghijklmn";38 char *pDes = "ghi";39 char *pSec = "sec";40 cout << StrStr(pStr, pDes) << endl; // 541 cout << StrStr(pStr, pSec) << endl; // -142 cout << StrStr(pStr, NULL) << endl; // -143 cout << StrStr(NULL, pSec) << endl; // -144 system("pause");45 }46 // run out:47 /*48 649 -150 -151 -152 请按任意键继续. . .53 */

【12】写一个函数把字符串A中的B字符子串用字符串C进行替换。

函数实现以及测试程序代码如下:

1 #include 
2 #include
3 using namespace std; 4 5 // 在字符串n中查找第一次出现子串m的位置 6 const char * StrStr(const char *src, const char *sub) 7 { 8 const char *bp; 9 const char *sp;10 int nIndex = -1;11 if ((NULL == src)||(NULL == sub))12 {13 return src;14 }15 16 while (*src)17 {18 bp = src;19 sp = sub;20 do21 {22 if (!*sp)23 {24 return src;25 }26 } while (*bp++ == *sp++);27 28 ++src;29 }30 31 return NULL;32 }33 34 //把字符串b中的所有字符串a用字符串c进行替换35 char* replace(const char *str, const char *sub1, const char *sub2, char *output)36 {37 char *pOutput = NULL;38 const char *pStr = NULL;39 int lenSub1 = strlen(sub1); // 子串sub1的长度40 int lenSub2 = strlen(sub2); // 子串sub2的长度41 pOutput = output;42 pStr = str; // 用于寻找子串43 while (*pStr != 0)44 {45 pStr = StrStr(pStr, sub1);46 if (NULL != pStr)47 {48 memcpy(pOutput, str, pStr-str); // 复制str的前一部分至pOutput49 pOutput += pStr - str;50 memcpy(pOutput, sub2, lenSub2); // 复制sub2子串到output51 pOutput += lenSub2;52 pStr += lenSub1; // 为下一次做准备53 str = pStr;54 }55 else56 {57 break;58 }59 }60 *pOutput = '\0';61 if (*str != '\0')62 {63 strcpy(pOutput, str);64 }65 66 return output;67 }68 69 void main()70 {71 char* str = "abcdefghijklabcdefstuvwxyz";72 char* str1 = "abcdef";73 char* str2 = "fffbb";74 char* outPut = (char *)malloc(sizeof(char) * 50);75 cout << replace(str, str1, str2, outPut) << endl;76 free(outPut);77 system("pause");78 }79 // run out:80 /*81 fffbbghijklfffbbstuvwxyz82 请按任意键继续. . .83 */

【13】待续...

 

Good  Good  Study, Day  Day  Up.

顺序  选择  循环  总结

 

转载于:https://www.cnblogs.com/Braveliu/archive/2012/12/31/2840686.html

你可能感兴趣的文章
Math
查看>>
git安装配置
查看>>
从CPU的运行到函数调用做个了解
查看>>
记录一次无聊的(经历了Nodejs -> Shell -> C)的探索问题过程
查看>>
接口请求失败处理,重新请求并限制请求次数.自己封装搞定retry函数
查看>>
C# 数据库连接增删改查
查看>>
Xcode 最近使用的一些问题
查看>>
JSP 自定义标签
查看>>
ACM_水题你要信了(修改版)
查看>>
题解报告:hdu 1087 Super Jumping! Jumping! Jumping!
查看>>
汇编实验一
查看>>
2015 Multi-University Training Contest 6 hdu 5357 Easy Sequence
查看>>
HDU 4856 Tunnels
查看>>
常用的页面加载慢的解决方案
查看>>
Excel催化剂开源第11波-动态数组函数技术开源及要点讲述
查看>>
关于Spring配置文件提示的插件下载
查看>>
软件工程师就业前景
查看>>
asp.net成员管理系统membership详解教程(一)
查看>>
情态动词
查看>>
关于linux的一些基础知识
查看>>