定長字串

2021-07-30 04:54:34 字數 3240 閱讀 3122

//字串的定長順序儲存方式,字串將位於棧上,其本身為以'\0'結尾的一串字元陣列

#ifndef _sstring_h_

#define _sstring_h_

#include #include #include #include #define stringlength 20

typedef unsigned char uchar;

typedef uchar sstring[stringlength + 1]; //定義陣列型別

void initstring(sstring ss);

void strassign(sstring ss, const char *string);

void strcpy(sstring des, const sstring src);

int strlen(const sstring s);

void show(const sstring s);

bool strempty(const sstring ss);

int strcmp(const sstring s1, const sstring s2);

void strconcat(sstring t, const sstring s1, const sstring s2); //將串s1 s2連線成乙個串t

void substring(const sstring s, sstring sub, int pos, int len); //在主串s的pos處取長度len個字元作為子串

int strindex(const sstring s, const sstring sub, int pos); //查詢子串sub在主串s中的下標,從主串s的pos位置開始查詢,未找到返回-1

void strreplace(sstring s, const sstring sub, const sstring t); //將主串s中的全部不重複子串sub全部替換為t

void strinsert(sstring s1, const sstring s2, int pos); //將串s2插入串s1的位置pos處

void strdelete(sstring s1, int pos, int len); //在串s1的位置pos處刪除長度為len的字串

void stringclear(sstring s);

#endif //_sstring_h_

#include "sstring.h"

void initstring(sstring ss)

void strassign(sstring ss, const char *string)

ss[stringlength] = '\0'; //結束符

} else //正常賦值

ss[j] = '\0'; //結束符 }}

void strcpy(sstring des, const sstring src)

des[len] = '\0';

}int strlen(const sstring s)

void show(const sstring s)

bool strempty(const sstring ss)

//比較兩個陣列內部的字串的ascii碼大小,如果s1大於s2返回正數,等於返回0,否則返回負數 ,當某個短串比較完畢後其與長串所有字元一致,則更長著大

int strcmp(const sstring s1, const sstring s2)

return *p - *q;

}//陣列的容量有限,不一定能裝下s1與s2中全部有效字元,需判斷

void strconcat(sstring t, const sstring s1, const sstring s2) //將串s1 s2連線成乙個串t

if( stringlength >= len_s1 + len_s2 ) //至少剛好能裝下s1與s2

t[i +j] = '\0';

} else if( stringlength > len_s1 ) //能裝下全部s1與部分s2

t[stringlength] = '\0';

} else //只能裝下s1 }

void substring(const sstring s, sstring sub, int pos, int len) //在主串s的pos處取長度len個字元作為子串

sub[i] = '\0';

}int strindex(const sstring s, const sstring sub, int pos) //查詢子串sub在主串s中的下標,從主串s的pos位置開始查詢,未找到返回-1

else //一旦發現不匹配,重新比較s的以前一次比較的開始字元之後1字元為開頭的數個字元與串sub全部字元

}if( '\0' == sub[j] ) //sub遍歷完成,即sub中所有字元均連續存在於s中,返回sub在s中的位置

else //未找到連續的匹配字元,返回-1表示不存在

return -1;

}void strreplace(sstring s, const sstring sub, const sstring t) //將主串s中的全部不重複子串sub全部替換為t

}//如果s2插入後s1與s2的整體長度大於陣列長度,則使s2實際插入長度為 陣列長度 - s1 長度

void strinsert(sstring s1, const sstring s2, int pos) //將串s2插入串s1的位置pos處

else //( stringlength > strlen(s1) ) 能插入部分s2

for (j = i; j >= 0; j--)

s1[pos + len + i] = '\0';

for (j = 0; j < len; j++) }

void strdelete(sstring s1, int pos, int len) //在串s1的位置pos處刪除長度為len的字串

s1[pos + j] = '\0'; //更新結束符

}void stringclear(sstring s)

#include "sstring.h"

void main()

獲得定長字串

c 中的字串是unicode編碼,length是unicode的char的個數。所以,假如乙個字串中中英文混雜,又想獲得乙個固定寬度的字串,就比較麻煩。單純轉換成位元組再擷取難免會碰到半個漢字的問題。下面實現了這樣的功能,返回固定位元組長度的字串,如果發生截斷,後面補充2個或者3個 根據截斷點的位置...

按照指定長度切割字串

按照指定長度分割字串 param inputstring 需要切割的源字串 param length 指定的長度 return public static string getdivlines string inputstring,int length if remainder 0 string s...

printf 列印 指定長度 字串

原樣輸出字串 printf s str 2.輸出指定長度的字串,超長時不截斷,不足時右對齊 printf ns str n 為指定長度的10進製數值 3.輸出指定長度的字串,超長時不截斷,不足時左對齊 printf ns str n 為指定長度的10進製數值 4.輸出指定長度的字串,超長時截斷,不足...