1、字符串操作#include string.h/初始化void init(mystring*string)string-p = NULL;string-realLength = 0;void initWithLength(mystring*string, int length)/开辟长度 内存清0string-p = (char*)calloc(length,sizeof(char);/分配内存并清0string-realLength = length;void initWithString(mystring*string, char*copystring)/初始化字符串 并拷贝if (NULL
2、=string)printf(字符串为空,无法拷贝n);return 0;int length = strlen(copystring);/获取字符串长度string-p = (char*)calloc(length + 1, sizeof(char);/由于此处的calloc已经全部初始化为0 所以下面的操作不需要考虑字符串结束标志/strcpy(string-p, copystring);/拷贝字符串mystrcpy(string-p, copystring);string-realLength = length + 1;/设置长度/显示字符串void showString(mystrin
3、g*string)printf(showString = %sn, string-p);/获取字符串长度int mystrlen(char*p)int length = 0;if (NULL=p)printf(字符串为空n);return 0;while (*p != 0)length+;p+;return length;/字符串拷贝char *mystrcpy(char*dest, const char*source)if (NULL=dest&NULL=source)printf(字符串为空n);return NULL;char *destbak = dest;while (*source
4、!=0)*dest = *source;/字符赋值source+;dest+;/指针前移*dest = 0;return destbak;/返回地址char*mystrcat(char*dest, const char*source)if (!dest|!source)printf(字符串为空,插入失败n);return NULL; elsechar*destbak = dest;/保留地址while (*destbak+) != 0);/指针前移while (*dest+) != 0)/循环并拷贝字符串*dest= *source;dest+;source+;*dest = 0;return
5、 destbak;/内部字符串当做指令来处理void run(mystring*string)system(string-p);/执行指令/查找字符串中第一个找到的字符 strchrchar*findFirstChar(mystring*string, char ch)char*p = mystrchr(string-p, ch);/使用自定义函数return p;char*mystrchr(const char*dest, const char ch)if (NULL=dest)return NULL;while (*dest+!=0)if (*dest=ch)return dest;/找到
6、 就返回地址return NULL;/没找到返回NULL/查找字符串 strstrchar*findFirstString(mystring*string, char*str)/返回第一个找到的字符串地址char*pres = mystrstr(string-p, str);return pres;/返回找到字符串的地址char*mystrstr(const char*const dest, const char*const findstr)/避免传递过来的字符串以及地址被随便修改/判断为空 很重要if (NULL=dest|NULL=findstr)return NULL;char*dest
7、bak = dest;char*p = NULL;/保存找到的字符串地址while (*destbak!=0 )int flag = 1;char*findstrbak = findstr;char*nowdestbak = destbak;while (*findstrbak!=0)if (*nowdestbak != 0)if (*findstrbak+ != *nowdestbak+)flag = 0;/不等elseflag = 0;break;if (1=flag)p = destbak;return p;destbak+;return NULL;/删除字符、字符串int delete
8、FirstChar(mystring*string, const char ch)/查找char*pstr = mystrchr(string-p, ch);if (NULL=pstr)return 0;char*pnext = pstr + 1;/双指针循环while (*pnext!=0)*pstr+ = *pnext+;/ok*pstr = 0;return 1;int deleteFirstString(mystring*string, char*const str)char*pres = mystrstr(string-p, str);if (NULL=pres)return 0;
9、elseint length = mystrlen(str);/字符串长度char*pnext = pres + length;while (*pnext!=0)*pres+ = *pnext+;*pres = 0;/字符串结尾结束标志return 1;/尾部增加 字符、字符串void backAddChar(mystring*string, char ch)if (strlen(string-p) + 1 = string-realLength)/重新分配内存string-p = realloc(string-p, string-realLength + 1);string-realLeng
10、th += 1;string-pstring-realLength - 2 = ch;string-pstring-realLength - 1 = 0;elseint nowlength = mystrlen(string-p);/求出当前长度string-pnowlength = ch;string-pnowlength + 1 = 0;void backAddString(mystring*string, char*str)int nowmyStringLength = mystrlen(string-p);/获取当前字符串长度int addStringLength = mystrlen
11、(str);/要增加字符串的长度if (nowmyStringLength + addStringLength + 1 string-realLength)int needAddLength = nowmyStringLength + addStringLength + 1 - string-realLength;/分配内存string-p = (char*)realloc(string-p, string-realLength + needAddLength);/增加字符串长度mystrcat(string-p, str);/字符串拼接string-realLength += needAdd
12、Length;/增加长度elsemystrcat(string-p, str);/拼接字符串/任意位置增加(字符、字符串) 根据地址void addChar(mystring *string, char ch, char *pos)if (NULL = pos|NULL=string)return NULL;if (mystrlen(string-p)+1=string-realLength)/重新分配内存string-p = realloc(string-p, string-realLength + 1);string-realLength += 1;int nowlength = myst
13、rlen(string-p);int movelength = mystrlen(pos);for (int i= nowlength; inowlength-movelength; i-)string-pi = string-pi - 1;string-pnowlength - movelength = ch;/插入elseint nowlength = mystrlen(string-p);/求出当前长度int movelength = mystrlen(pos);/求出现在要移动的长度for (int i = nowlength; i nowlength - movelength; i-
14、)string-pi = string-pi - 1;string-pnowlength - movelength = ch;string-pnowlength+1 = 0;void addString(mystring*string, char *str, char*pos)if (NULL=pos|NULL=string)return;int nowmystringlength = mystrlen(string-p);/获取当前长度int addstringlength = mystrlen(str);/要增加的字符串长度if (nowmystringlength+addstringle
15、ngth+1string-realLength)/判断是否string-p = (char*)realloc(string-p, string-realLength + needaddlength);string-realLength += needaddlength;/增加长度int nowlength = mystrlen(string-p);/求出当前的长度int movelength = mystrlen(pos);/求出现在要移动的长度int insertlength = mystrlen(str);/要求出插入的长度for (int i = nowlength; i =nowlen
16、gth-movelength ;i+)string-pi + insertlength = string-pi;/字符移动for (int j = 0; j pnowlength - movelength+j = strj;/赋值拷贝elseint nowlength = mystrlen(string-p);/求出当前的长度int movelength = mystrlen(pos);/求出现在要移动的长度int insertlength = mystrlen(str);/要求出插入的长度for (int i = nowlength; i = nowlength - movelength;
17、i+)string-pi + insertlength = string-pi;/字符移动for (int j = 0; j pnowlength - movelength + j = strj;/赋值拷贝/任意位置修改(字符、字符串) 根据地址void changeFirstChar(mystring*string, const char oldchar, const char newchar)char *pstr = string-p;while (*pstr!=0)if (*pstr=oldchar)*pstr = newchar;return;/如果套替换所有的字符 去掉return即
18、可pstr+;void changeFirstString(mystring*string, char*const poldstr, char*const pnewstr)char*pfind = findFirstString(string,poldstr);if (NULL!=pfind)deleteFirstString(string, poldstr);addString(string, pnewstr, pfind);3.文件main.c2KB下载(5)?12345678910111213141516171819202122232425262728293031323334353637
19、3839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128#include string.hvoid main1()mystring string1;/函数内部改变外部变量 需要地址initWithString(&string1,myn
20、ameisrocket);showString(&string1);printf(字符串长度:%dn, mystrlen(&string1);getchar();void main2()mystring string1;/ initWithString(&string1, cal);/ showString(&string1);/ /增加字符/ backAddChar(&string1, c);/ run(&string1);/增加字符串initWithString(&string1, note);showString(&string1);backAddString(&string1, pad
21、);showString(&string1);run(&string1);getchar();/测试字符查找函数 strchrvoid main3()mystring string1;initWithString(&string1, calaaaa);showString(&string1);/修改 将找到的一个字符a改为Achar*pstr = findFirstChar(&string1, a);*pstr = A;showString(&string1);getchar();/测试strstr mystrstrvoid main4()mystring string1;initWithString(&string1, calaaaa);showString(&string1);char *pstr = findFirstString(&string1, laz);/ printf(查找:%sn, *pstr);/errorprintf(查找:%sn, pstr);if (pstr!=NULL)*pstr = Z;showString(&string1);getchar();/删除(字符、字符串)依赖于查找void main5()mystring string1;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1