幾個字串的處理函式

2021-10-16 01:32:41 字數 4878 閱讀 5680

/將字串中的小寫字母轉換為大寫

//str:要轉換的字串

//len:字串長度

void

lowertocap

(u8 *str,u8 len)

}

//對比字串str1和str2

//*str1:字串1指標

//*str2:字串2指標

//返回值:0,相等;1,不相等;

u8 usmart_strcmp

(u8 *str1,u8 *str2)

return0;

//兩個字串相等

}

//把str1的內容copy到str2

//*str1:字串1指標

//*str2:字串2指標

void

usmart_strcopy

(u8*str1,u8 *str2)

}

//得到字串的長度(位元組)

//*str:字串指標

//返回值:字串的長度

u8 usmart_strlen

(u8*str)

return len;

}

//m^n函式

//返回值:m^n次方

u32 usmart_pow

(u8 m,u8 n)

//把字串轉為數字

//支援16進製制轉換,但是16進製制字母必須是大寫的,且格式為以0x開頭的.

//不支援負數

//*str:數字字串指標

//*res:轉換完的結果存放位址.

//返回值:0,成功轉換完成.其他,錯誤**.

//1,資料格式錯誤.2,16進製制位數為0.3,起始格式錯誤.4,十進位制位數為0.

u8 usmart_str2num

(u8*str,u32 *res)

elseif(

*p==

'\0'

)break

;//碰到結束符,退出.

else

return1;

//不全是十進位制或者16進製制資料.

p++;}

p=str;

//重新定位到字串開始的位址.

if(hexdec==16)

//16進製制資料

else

return3;

//起始頭的格式不對

}else

if(bnum==0)

return4;

//位數為0,直接退出.

while(1

)return0;

//成功轉換

}

//得到指令名

//*str:源字串

//*cmdname:指令名

//*nlen:指令名長度

//maxlen:最大長度(做限制,指令不可能太長的)

//返回值:0,成功;其他,失敗.

u8 usmart_get_cmdname

(u8*str,u8*cmdname,u8 *nlen,u8 maxlen)

*cmdname=

'\0'

;//加入結束符

return0;

//正常返回

}

//獲取下乙個字元(當中間有很多空格的時候,此函式直接忽略空格,找到空格之後的第乙個字元)

//str:字串指標

//返回值:下乙個字元

u8 usmart_search_nextc

(u8* str)

//從str中得到函式名

//*str:源字串指標

//*fname:獲取到的函式名字指標

//*pnum:函式的引數個數

//*rval:是否需要顯示返回值(0,不需要;1,需要)

//返回值:0,成功;其他,錯誤**.

u8 usmart_get_fname

(u8*str,u8*fname,u8 *pnum,u8 *rval)

else

if(pcnt==

0x85

)break

; strtemp++;}

if(pcnt)

//接收完了

res=0;

strtemp=str;

while

(*strtemp!=

'('&&

*strtemp!=

'\0'

)//此**找到函式名的真正起始位置

} strtemp=str;

if(offset)strtemp+=offset+1;

//跳到函式名開始的地方

res=0;

nchar=0;

//是否正在字串裡面的標誌,0,不在字串;1,在字串;

while(1

)elseif(

*strtemp==

'('&&nchar==

0)fover++

;//括號深度增加一級

elseif(

*strtemp==

')'&&nchar==0)

elseif(

*strtemp==

'"')nchar=

!nchar;

if(fover==0)

//函式名還沒接收完

}else

//已經接受完了函式名了.

elseif(

*strtemp!=

' '&&

*strtemp!=

'(')

temp++

;//得到有效引數(非空格)}if

(fover==

1&&temp==2)

} strtemp++;}

if(parmnum==1)

//只有1個引數.

*pnum=parmnum;

//記錄引數個數

*fname=

'\0'

;//加入結束符

return res;

//返回執行結果

}

//從str中得到乙個函式的引數

//*str:源字串指標

//*fparm:引數字串指標

//*ptype:引數型別 0,數字;1,字串;0xff,引數錯誤

//返回值:0,已經無引數了;其他,下乙個引數的偏移量.

u8 usmart_get_aparm

(u8 *str,u8 *fparm,u8 *ptype)

elseif(

*str==

'"')

//找到字串的開始標誌

elseif(

*str!=

' '&&

*str!=

',')

//發現非法字元,引數錯誤

}else

//string類

*fparm=

*str;

//小寫或者數字保持不變

fparm++;}

} i++

;//偏移量增加

str++;}

*fparm=

'\0'

;//加入結束符

*ptype=type;

//返回引數型別

return i;

//返回引數長度

}

//得到指定引數的起始位址

//num:第num個引數,範圍0~9.

//返回值:該引數的起始位址

u8 usmart_get_parmpos

(u8 num)

//從str中得到函式引數

//str:源字串;

//parn:引數的多少.0表示無引數 void型別

//返回值:0,成功;其他,錯誤**.

u8 usmart_get_fparam

(u8*str,u8 *parn)

str++

;//偏移到"("之後的第乙個位元組

while(1

)break

;case1:

//字串

len=

usmart_strlen

(tstr)+1

;//包含了結束符'\0'

usmart_strcopy

(tstr,

&usmart_dev.parm[

usmart_get_parmpos

(n)]);

//拷貝tstr資料到usmart_dev.parm[n]

usmart_dev.parmtype|=

1

usmart_dev.plentbl[n]

=len;

//該引數的長度為len

n++;if

(n>max_parm)

return usmart_parmover;

//引數太多

break

;case

0xff

://錯誤

return usmart_parmerr;

//引數錯誤 }if

(*str==

')'||

*str==

'\0'

)break

;//查到結束標誌了.

}*parn=n;

//記錄引數的個數

return usmart_ok;

//正確得到了引數

}

Oracle幾個字串函式

平常我們用oracle主要有兩種字串型別 1 char始終為固定的長度,如果設定了長度小於char列的值,則oracle會自動用空格填充的。當比較char時,oracle用空格將其填充為等長,再進行比較 2 varchar2資料型別為可變長度,雖然與varchar資料型別是同義的,但在今後的orac...

strcpy memcpy幾個字串函式的完美版

strcpy函式 char strcpy char strdest,const char strsrc memcpy函式 void memcpy void pvto,void pvform,size t size assert pvto null pvfrom null assert pbto pv...

python中的幾個字串處理函式

功能 將字串str當成有效的表示式來求值並返回計算結果。語法 eval source globals locals value 引數 例子 1可以把list,tuple,dict和string相互轉化。2 3 字串轉換成列表 4 a 1,2 3,4 5,6 7,8 9,0 5 type a 6 7 ...