⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 string.c

📁 可以在嵌入式应用中
💻 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 + -