iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 15
1

HI! 我是Maple 剛滿20歲沒多久的小朋友 請ㄅ要欺負窩QAQ


恭喜學姊賀喜學姊上了台科大

資料結構作業終於寫完了,來分享一下寫的過程(用DEVC寫的)

題目是這樣的
https://ithelp.ithome.com.tw/upload/images/20181030/20112138ynr5FyzxYq.png
要做出這幾個功能
1、2、3、7都很簡單就不多說ㄌ

4(插入功能)就是看要插入的字串有多長,從最後一個位置的字元開始往後位移要插入的字串長度,一個字元一個字元位移直到要插入的位置停下,再把字串插入

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';	
}

~5我想了很久,一直想不到要怎麼寫,後來聽朋友說,阿不就插入再刪除就好了,所以我就先去寫刪除了~

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相符的字串的第一個字元的指標位置


上一篇
大二資工人-DAY14-考試分享
下一篇
大二資工人-DAY16-日常分享
系列文
大二資工人-30天成長日記31

尚未有邦友留言

立即登入留言