//重置
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); //释放内存
num=NULL;
//Print_String(&strs);
getchar();
return 0;
}
总结:写到这里算是对字符串处理,告一段落了,写完了才发现,字符串的处理就是对数组链表的处理,其实这里对效率没有要求,新手了,算是对指针的联系了,最后我把源码贴出,由于都是晚上写,肯定有错误支出,希望大家能谅解,我会及时更正
http://download.csdn.net/detail/mingyueruya/8381295
版权声明:本文为博主原创文章,未经博主允许不得转载。