1. 程式人生 > >C語言實現在英語句子查詢和替換一個單詞。

C語言實現在英語句子查詢和替換一個單詞。

用C語言實現從字串中讀取存在單詞的位置,並替換成別的單詞,可用於英語句子中的單詞替換。

注意:

1、該程式被替換的是單個單詞,而不是單詞裡的字元,如替換"like"裡的'i''u'

效果圖如下:


2、被替換的不能是多個單詞的組合,如替換"like you""hate you"

效果圖如下:


3、替換的單詞只能是個單詞,如替換"like you"裡的"you""me"

效果圖如下:


4、替換的單詞可以為多個,如替換"like you"裡的"you""you and me"

效果圖如下:


具體程式碼如下:(可能存在不足之處,希望能給予指出,謝謝!)

#include <stdio.h>
#include <stdlib.h>
#include<string.h>

int searchWord(char S[],char W[]);
char* replaceWord(char S[], char W[], int pos, char R[]);

int main(){
	char S[100]="like you";
	char temp0[20];
	char temp1[20];
	char *result;

	int i;
	printf("原文字為:%s\n請輸入要替換的單詞:",S);
	gets(temp0);
	i=searchWord(S,temp0);
	if(i==-1){
		printf("句子裡不存在該單詞!");
	}
	else{
		printf("請輸入要替換的單詞:");
		gets(temp1);
		result = replaceWord(S,temp0,i,temp1);
		printf("%s",result);
	}
	return 0;
}

//查詢單詞在句子的開端S代表Sentence(句子),W代表Word(單詞)
int searchWord(char S[],char W[]){
	int i,j;				//迴圈變數
	int n;					//句子長度+1('\0')
	int k;					//單詞長度
	
	n=strlen(S)+1;			//獲取句子長度+1('\0')
	k=strlen(W);			//獲取單詞長度
	
	for(i=0;i<n-k;i++){			//迴圈到n-k,因為n-k後面,找不到含有k個字元的單詞了。
		for(j=0;j<k;j++){				//迴圈單詞每個字母
			if(S[i+j]!=W[j]||W[j]==' '){		//當S[i+j]不與W[j]相等,或者單詞裡出現空格時跳出
				break;
			}
		}
		if(j==k&&(S[i+j]==' '||S[i+j]=='\0')){		
			/*j==k,表示句子裡存在與單詞完全匹配的字母(可能還不是單詞)。如String與tri此時匹配能成功。
			而S[i+j]等於' '或者'\0',表示句子後面分割或者結束。但匹配的段落前面不一定分割。
			如String與ing匹配能成功,但String與tri匹配就不能成功了。*/
			if(i==0||(i>0&&S[i-1]==' ')){		//此處判斷是否有前分割,只有句首和存在前分割的段落才是單詞
				return i;
			}
		}
	}
	return -1;
}

char* replaceWord(char S[], char W[], int pos, char R[]){
	int sizeS = strlen(S)+1;
	int sizeW = strlen(W);
	int sizeR = strlen(R);
	int size = sizeS - sizeW + sizeR;
	int i, j;
	char* result = (char*)malloc(sizeof(char)*size);			//程式未釋放記憶體,你們可按需要改進

	for(i=0;i<pos;i++){
		result[i] = S[i];
	}
	for(i=pos;i<pos+sizeR;i++){
		result[i] = R[i-pos];
	}
	for(pos+sizeR;i<size;i++){
		result[i]=S[i+sizeW-sizeR];
	}
	return result;
}