堆分配的儲存特點
1、依然是以一組位址連續的儲存單元存放串值字串行
2、儲存單元由動態分配
儲存結構
typedef
struct
hstring;
初始化
在這裡,使用for (i = 0, c = chars; *c; c++, i++);
這是乙個單獨的語句,沒有**塊。相當於for (i = 0, c = chars; *c; c++, i++){}
。
但是在最開始的時候我忘記了加分號,導致for迴圈和它下面的if語句為一體。
void
initstr
(hstring &t)
void
strassign
(hstring &t,
char
*chars)
//把傳入的字元給t
//如果該字串為空
//則指標為null,長度為0
else
t.length = i;
//最後更新length
}}
列印字串/字串長度
在求字串長度時:
假設傳入引數為「我是傻子」
那麼字串的長度!=4
而是等於8
原因:漢字與字元位元組數不相同,漢字佔兩個位元組。所以長度為8
void
strshow
(hstring t)
printf
("\n");
}int
length
(hstring t)
字串比較int
strcompare
(hstring t, hstring h)
//如果t比h大,返回正數
//如果小,返回負數
//如果相等,返回0
//如果兩個都相等
//返回0
return t.length - h.length;
}
清空字串void
clearstr
(hstring &t)
//只需要釋放原指標空間,再將指標置為0
t.length =0;
//初始化長度為0
}
連線兩個字串void
concatstr
(hstring &t, hstring s1, hstring s2)
int j = s1.length;
//在s1的尾部繼續放s2
for(
int m =
0; m < s2.length; m++
) t.length = s1.length + s2.length;
//最後更新連線好以後新字串的長度
}
取子串void
substring
(hstring t, hstring &sub,
int pos,
int len)
sub.length = len;
}
插入字串void
strinsert
(hstring &t, hstring insertstr,
int pos)
else
exit(-
1);//首先給他挪位置
for(
int i = t.length -
1; i >pos-
1; i--
)//當i還沒走到當前要插入的位置時,從最後乙個開始,每乙個都往後挪
//int j = pos - 1;//錯誤
//錯誤是因為,函式要求在pos之前插入子串,這樣最後不是在騰出來的地方放,而是覆蓋了前面乙個字元
int j = pos;
for(
int i =
0; i < insertstr.length; i++
) t.length +
= insertstr.length;
//最後更新新串的長度
}
空/複製bool emptystr
(hstring t)
void
strcopy
(hstring &t, hstring s)
t.length = s.length;
//更新新串長度
}
找子串status index
(hstring s, hstring t)
//s:父親,t:子串
return i;
//否則返回父串的第i個位置後為此字串}}
return0;
}
字串基本操作
include unsigned int strlenth char s 獲取字串長度 return lenth void strcopy char target,char source 字串拷貝 int strcompare char s,char t 字串比較,s t,則返回1 s t,則返回0...
字串基本操作
遞迴求字串長度 int recurlength char str 字串中最後乙個引數的長度 int lastwordlen char str,int len int lastwordlen char str return lastlen 字串記憶體的拷貝 實現memmove函式 char my me...
字串基本操作
判斷字串開頭結尾字元 string.startswith l 判斷字串是否以l開頭 string.endswith n 判斷字串是否以n結尾 返回字串中字元的位置 string.find x 找到這個字元返回下標,多個時返回第乙個 不存在的字元返回 1 string.index x 找到這個字元返回...