HI! 我是Maple 剛滿20歲沒多久的小朋友 請ㄅ要欺負窩QAQ
恭喜學姊賀喜學姊上了台科大
題目是這樣的
要做出這幾個功能
1、2、3、7都很簡單就不多說ㄌ
void MyString::insert(int index, char* s){ //插入字串到指定的位置
for(int i = strlen(str), j = 0; i > index; i--, j++){
str[i + strlen(s) -1] = str[i - 1]; //位移字串,位移量和要插入的字串長度相同
}
for(int j = 0; j < strlen(s); j++){ //插入字串
str[index + j] = s[j];
}
str[strlen(str) + 1] = '\0';
}
### 6(刪除功能)刪除就是刪除字串str裡,符合target的部份,用了上課教到的strstr(str1, str2),找到符合的字串位置,開始從相符字串的後一個位置開始往前位移,直接蓋掉要刪除的字串。
```
void MyString::remove(char* target){ // 刪除字串 str 裡,符合 target 的部份
char *where;
while(strstr(str, target) != NULL){
where = strstr(str,target);
for(int i = where - str; i < strlen(str); i++){
str[i] = str[i + strlen(target)];
}
}
}
```
### 5既然插入跟刪除都做完了那替換就很簡單了,先插入要換上的字串,再把要換掉的字串刪除,就完成了
```
void MyString::replace(char* target, char* replacement){ //把 str 裡,符合 target 的部份,全部取代成 replacement例如:"ABABAB" 執行了 replace("AB", "C") 就會變成 "CCC"
char *where; //紀錄位置
printf("1\n");
while(strstr(str, target) != NULL){ //回傳NULL時表示沒有相同的字串
where = strstr(str, target);
printf("2\n");
for(int i = strlen(str), j = 0; i > where - str; i--, j++){ //位移字串
str[i + strlen(replacement) -1] = str[i - 1];
}
printf("3\n");
for(int j = 0; j < strlen(replacement); j++){ //插入字串
str[where - str + j] = replacement[j];
}
str[strlen(str) + 1] = '\0';
printf("%s\n", str);
where = strstr(str, target);
for(int i = where - str; i < strlen(str); i++){ //刪除字串
str[i] = str[i + strlen(target)];
}
printf("%s", str);
}
}
```
### strstr(str1, str2)這個語法會回傳在str1中與str2相符的字串的第一個字元的指標位置