C語言實現在英語句子查詢和替換一個單詞。
阿新 • • 發佈:2019-02-16
用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; }