📄 string.c
字号:
#include <CsAgb.h>
#include <rbasic.h>
#include <string.h>
#include <math.h>
#include <rb_math.h>
u8 is_low_letter(char ch)//实符是否为小写字母
{
return (ch>='a' && ch<='z');
}
u8 is_hi_letter(char ch)//是否为大写字母
{
return (ch>='A' && ch<='Z');
}
u8 is_letter(char ch)//是否为英文字母
{
return ((ch>='a' && ch<='z') || (ch>='A' && ch<='Z'));
}
u8 is_number(char ch)//是否为数字
{
return (ch>='0' && ch<='9');
}
void str_simple(char *exp,char ch)//去除重复字母ch
{
u8 i=0,j=0;
u8 blank=1;
while (exp[j]!='\0')
{
if (exp[j]==ch && blank) j++;
else if(exp[j]==ch)
{
exp[i]=ch;
blank=1;
i++;
j++;
}
else
{
exp[i]=exp[j];
i++;
j++;
blank=0;
}
}
exp[i]='\0';
}
void del_blank(char *str)//去除重复空白
{
str_simple(str,' ');
}
void no_blank(char *str)//去除所有空白
{
u8 i=0,j=0;
while(str[j]!=0)
{
if (str[j]==' ') {j++;continue;}
str[i]=str[j];
i++;
j++;
}
str[i]='\0';
}
void str_up(char *str)//字母统一大写
{
u8 i=0;
u8 iis=1;
while (str[i]!='\0')
{
if (is_low_letter(str[i]) && iis) str[i]-=32;
else if(str[i]=='\"') iis=!iis;
i++;
}
}
void str_low(char *str)
{
u8 i=0;
while (str[i]!='\0')
{
if (is_hi_letter(str[i])) str[i]+=32;
i++;
}
}
u8 str_len(char *str)//字符串长度
{
u8 i=0;
while(str[i]!='\0') i++;
return i;
}
void str_reverse(char *str)//字符串反置
{
u8 len=str_len(str);
u8 step=len/2;
char temp;
u8 i;
len--;
for (i=0;i<step;i++)
{
temp=str[i];
str[i]=str[len-i];
str[len-i]=temp;
}
}
void str_mv(char *str,u8 dre,u8 step)//字符循环移动(dre=0 右移)
{
u8 len=str_len(str);
u8 i;
char temp[str_max_len];
step=step%len;
if (step==0) return;
if (dre) step=len-step;
for (i=0;i<len;i++) temp[i]=str[(i+step)%len];
temp[len]='\0';
strcpy(str,temp);
}
void str_cat(char *str,char *str1)//将str1连接到str末尾
{
u8 i=0;
u8 len=str_len(str);
u8 maxlen=str_max_len-1;
while(str1[i]!='\0' && len<maxlen)
{
str[len]=str1[i];
i++;
len++;
}
str[len]='\0';
}
u8 str_find(char *str,char *index)//探索index在str首次出现的位置
{
u8 i=0;
u8 j=0;
u8 len=str_len(str);
u8 len1=str_len(index);
if (len1==0 || len1>len) return str_max_len;//不可能发现
for (i=0;i<len;i++)
{
if (str[i]==index[j]) j++;
else
{
if(j) i--;
j=0;
}
if (j==len1) return i-len1+1;
}
return str_max_len;
}
void str_replace(char *str,char *index,char *re)//将str中的index子串全用re串代替
{
u8 i=0;
u8 j=0;
u8 len=str_len(str);
u8 len1=str_len(index);
u8 len2=str_len(re);
u8 loc[str_max_len];
u8 find=0;
u8 tp=0;
u8 strp=0;
u8 start=0;
char temp[str_max_len];
if (len1==0 || len1>len) return;
while(find!=str_max_len)
{
find=str_find(str+start,index);
if (find==str_max_len) loc[i]=str_max_len;
else loc[i]=find+start;
i++;
start=find+len1+start;
}
if (loc[0]==str_max_len) return;//无需替代
i=0;
while (loc[i]!=str_max_len && tp<str_max_len)
{
for (j=strp;j<loc[i];j++)
{
if (tp>=str_max_len-1) break;
temp[tp]=str[j];
tp++;
}
temp[tp]='\0';
str_cat(temp,re);
tp+=len2;
strp=j+len1;
i++;
}
for (i=strp;i<len;i++)
{
if (tp>=str_max_len-1) break;
temp[tp]=str[i];
tp++;
}
temp[tp]='\0';
strcpy(str,temp);
}
void str_insert(char *str,char *insert,u8 loc)
{
u8 len=str_len(str);
u8 i=loc;
char temp[str_max_len];
if (loc>len || insert[0]=='\0') return;
while (str[i]!='\0')
{
temp[i-loc]=str[i];
i++;
}
temp[i-loc]='\0';
i=0;
while(insert[i]!='\0')
{
if (loc==str_max_len-1) break;
str[loc]=insert[i];
i++;
loc++;
}
i=0;
while(temp[i]!='\0')
{
if (loc==str_max_len-1) break;
str[loc]=temp[i];
i++;
loc++;
}
str[loc]='\0';
}
void str_cover(char *str,char *cover,u8 loc)//以cover
{
u8 len=str_len(str);
u8 i=0;
if (loc>len || cover[0]=='\0') return;
while (cover[i]!='\0')
{
str[loc]=cover[i];
i++;
loc++;
}
if (loc>len) str[loc]='\0';
}
void str_cv(char *str,char *cv,u8 loc,u8 num)//将str从loc起的n个字符用cv代替
{
u8 len=str_len(str);
u8 len1=str_len(cv);
u8 i;
u8 start;
if (num==0) return;
if (len1>num)//后移字符
{
start=len+len1-num;
for (i=loc+num;i<=len;i++)
{
if (start<str_max_len-1) str[start]=str[start-len1+num];
start--;
}
}
else if(len1<num)//数据前移
{
start=loc+len1;
for (i=loc+num;i<len;i++)
{
str[start]=str[i];
start++;
}
str[start]='\0';
}
i=0;
while (cv[i]!='\0')
{
str[loc+i]=cv[i];
i++;
}
str[str_max_len-1]='\0';
}
void str_sub(char *sub,char *str,u8 loc,u8 num)//取子串
{
u8 i;
u8 j=0;
u8 len=str_len(str);
if (num>str_max_len-2) num=str_max_len-2;
if (loc<len)
{
i=loc;
while (str[i]!='\0' && j<num)
{
sub[j]=str[i];
i++;
j++;
}
}
sub[j]='\0';
}
void str_left(char *sub,char *str,u8 num)
{
str_sub(sub,str,0,num);
}
void str_right(char *sub,char *str,u8 num)
{
u8 len=str_len(str);
if (num>len) num=len;
str_sub(sub,str,len-num,num);
}
void num_to_str(double x,char *str)
{
u8 strp=0;
u8 step=0;
char exp[11];
u32 int_n;
int index;
char is_neg=(x<0.0);
int i;
char dot=0;
char end=0;
if (x==0.0)
{
str[0]='0';
str[1]='\0';
return;
}
if (is_neg)
{
str[0]='-';
strp++;
}
x=abs(x);
index=get_int(log10(x));
x=x/power10(index);
if (x>=10) {x=x/10;index++;}
x=x+0.0000000001;
for (i=0;i<10;i++)
{
exp[i]=48+(int)x;
x=x-(int)x;
x=x*10;
}
exp[10]='\0';
end=9;
for (i=9;i>=0;i--)
{
if (exp[i]!='0') {end=i;break;}
}//冗余0的首位置
if (index>=0 && index<9)
{
if (end<index) end=index;
for (i=0;i<=end;i++)
{
str[strp]=exp[i];
strp++;
if (i==index && end!=index)
{
str[strp]='.';
strp++;
}
}
}
else if(abs(index)>=9)
{
for (i=0;i<=end;i++)
{
str[strp]=exp[i];
strp++;
if (i==0)
{
str[strp]='.';
strp++;
}
}
if (end==0)
{
str[strp]='0';
strp++;
}
str[strp]='E';
strp++;
if (index<0)
{
str[strp]='-';
strp++;
index=0-index;
}
step=get_int(log10(index))+1;
for (i=0;i<step;i++)
{
str[strp+step-i-1]=48+index%10;
index=index/10;
}
strp=strp+step;
}
else
{
dot=abs(index);
for (i=0;i<dot;i++)
{
str[strp]='0';
strp++;
if (i==0)
{
str[strp]='.';
strp++;
}
}
for (i=dot;i<=end+dot;i++)
{
str[strp]=exp[i-dot];
strp++;
}
}
str[strp]='\0';
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -