首页 > 代码库 > 自己动手写字符串库函数 四(C语言)
自己动手写字符串库函数 四(C语言)
上一篇 自己动手写字符串库函数 三(C语言)
//重置 void my_StrSet(string *des, const char ch) { if (!IsEmpty(des)) return; else { char* des1 = des->str; int desLen = my_StrLen(des->str); while (desLen--) *des1++ = ch; } } //插入字符串 void my_InsertStr(string*strs, const char * sour, int pos) { if (!IsEmpty(strs) || sour == NULL) return; int desLen = strs->len; int sourLen = my_StrLen(sour); int allLen = desLen + sourLen; int flag = pos; if (pos<0 || pos>desLen) return; strs->str = (char*)realloc(strs->str, desLen + sourLen + sizeof(char)); if (strs->str == NULL) return; char* des1 = strs->str; strs->len = sourLen + desLen + sizeof(char); while (desLen >= pos) *(des1 + (desLen--) + sourLen) = *(des1 + desLen); while (pos < flag + sourLen) *(des1 + pos++) = *sour++; //将最后一个位置的字符设置'\0' *(des1 + strs->len) = 0; } void my_DelPosStr(string*strs, int start, int end) { if (!IsEmpty(strs)) return; int desLen = my_StrLen(strs->str); if ((start < 0 || end <= start) || (start>desLen || end>desLen)) return; int len = end - start; char*des1 = strs->str; //strs->len -= len; while (end <= desLen) { *(des1 + start++) = *(des1 + end++); } strs->len -= len; } //将字符串转为整数 那么如果将数字转为字符也是简单的事 void my_atoi(string*strs, int* num) { if (!IsEmpty(strs) || num == NULL) return; char* des = strs->str; //1.检测能不能转换 for (size_t i = 0; i < strs->len - 1; i++) { if (*(des + i)<'0' || *(des + i)>'9') //不能转换 return; } int result = 0; while (*des != '\0') { result *= 10; result += *des++ - 48; //那么如果将数字转为字符也是简单的事 } *num = result; } //字符串比较 大返回1,小于返回0,相等返回2 int my_strcmp(char*strs, char * sour) { if (!IsEmpty(&strs) || sour == NULL) return; char*des = strs; while (*sour != '\0') { if (*sour == *des) { sour++; des++; if (*sour == '\0' && *des == '\0') return 2; } else { if (*des > *sour) return 1; else return 0; } } return 1; } //字符串比较 忽略大小写 //对原来的字符串没有影响 int my_stricmp(char*strs, const char * sour) { if (!IsEmpty(&strs) || sour == NULL) return; int desLen = my_StrLen(strs); int sourLen = my_StrLen(sour); char* des = (char*)malloc(desLen + 1); strcpy(des, strs); char*sour1 = (char*)malloc(sourLen + 1); strcpy(sour1, sour); int len = desLen <= sourLen ? desLen : sourLen; //将大写转为小写 for (int i = 0; i < len; i++) { if (!((*(des + i) >= 'A' && *(des + i) <= 'Z'))) *(des + i) = *(des + i) - 32; if (!((*(sour1 + i) >= 'A' && *(sour1 + i) <= 'Z'))) *(sour1 + i) = *(sour1 + i) - 32; } return my_strcmp(des, sour1); } //测试代码 main函数 #include "String.h" int main() { string strs; int *num = (int*)malloc(sizeof(int)); Init_With_Str(&strs, "tasklist"); //my_InsertChar(&strs,'A',11); //my_DelPosChar(&strs,1); //my_StrSet(&strs,'A'); /*my_InsertStr(&strs, "abc", 8); my_DelPosStr(&strs,10,11);*/ /*my_StrSet(&strs,'1'); my_atoi(&strs, num); */ my_StrCopy(&strs,"1234567"); my_atoi(&strs, num); printf("%d\n", *num); free(num); //释放内存 //Print_String(&strs); getchar(); return 0; }
总结:写到这里算是对字符串处理,告一段落了,写完了才发现,字符串的处理就是对数组链表的处理,其实这里对效率没有要求,新手了,算是对指针的联系了,最后我把源码贴出,由于都是晚上写,肯定有错误支出,希望大家能谅解,我会及时更正
http://download.csdn.net/detail/mingyueruya/8381295
自己动手写字符串库函数 四(C语言)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。