c語言實現基礎的查詢替換功能模組

2021-10-08 16:24:51 字數 1613 閱讀 3978

常用字處理軟體或者編輯器都提供字串的查詢和替換功能,本文描述如何借助c語言的字串處理函式來實現字串的查詢和替換功能。

先說查詢,字串的查詢主要使用strstr函式,其原型為:char * strstr(char * str1, char * str2),函式的功能是在str1中查詢str2,如果str2是str1的子串,則返回str2在str1中第一次出現的位置,否則返回空指標。

str2可能在str1**現多次,如果希望把所有的str2都找出來,呼叫一次strstr是不夠的,必須多次使用strstr函式,而且要不斷更新str1。用乙個簡單例子來說明基本思路,在str1中查詢the這個單詞, str1=「i will give you the book the day aftertomorrow.」, str2=「the」。第一次呼叫strstr函式:p = strstr(str1, str2),找到了第乙個the,返回值是這個the的位址,即指標p指向字母t。接下來需要在第乙個the後面的字串(也就是剩餘字串)中尋找其它的the,所以我們要將str1更換為剩餘字串,然後再呼叫strstr函式,也就是說在剩餘字串中找第乙個the。借助p來實現這個更換,把p移到the後面,用p作為剩餘字串的首位址,即 p=p+3; p= strstr(p, str2)。這次就找到了第二個the,p指向了第二個the中的字母t。迴圈這個過程,直到p為空指標,就可以找到所有的str2。

下面說替換,意思就是用另乙個字串str3來替換str1中所有的str2。替換過程和查詢的過程可以合併在一起,在上面迴圈查詢的過程中,每找到乙個str2,就把它替換為str3,替換後移動指標p。替換的情況分好幾種:一種是str2和str3的長度相同,一種是str3比str2長,一種是str3比str2短。第一種情況比較簡單,直接使用strncpy函式就可以,後面兩種情況,都需要把str1中的元素進行移動。比如,在上面的例子中,str2=「the」,假設str3 =「this」,str3比str2長,為了有足夠的空間,每找到乙個the,從the後面的字元開始到結尾的『\0』都要往後移動1個位元組,也就是給this騰出4個位元組的地方來(the的3個位元組加移出來的1個位元組)。假設str3 =「ok」,str3比str2短,為了填補空缺,每找到乙個the,從the後面的字元開始到結尾的『\0』都要往前移動1個位元組,也就是給ok留出兩個位元組的地方就夠了。移動過後,使用strncpy函式把str3拷貝到str2所在的地方。下面的程式中,str_replace就是用來實現替換功能的。

#include #include #include void str_replace(char * cp, int n, char * str)

*(tmp-(n-lenofstr)) = *tmp; //move '\0'

}else

//str3比str2長,往後移動

if(lenofstr > n)

}strncpy(cp,str,lenofstr);

}int main()

str1[i] = '\0';

//開始查詢字串str2

p = strstr(str1,str2);

while(p)

printf("\ncount = %d\n",count);

printf("result = %s\n",str1);

}

C語言實現Linux cd功能

查了一下,關於cd命令網上有各種複雜的實現方式。其實要求不嚴格的話,呼叫chdir 即可實現。cd方法簡單實現 void cd char path int chdir const char path 說明 chdir函式用於改變當前工作目錄。呼叫引數是指向目錄的指標,呼叫程序需要有搜尋整個目錄的許可...

C語言實現檔案字元替換

c語言標準路為我們提供了檔案操作函式 包含 fopen fclose 檔案開啟與關閉函式 引數與返回型別省略 fgetc fputc 從流中獲取字元,向檔案流中寫入字元 getc putc 與fgetc fputc 等價,不同的是,當getc putc 定義為巨集時,可能多次計算stream的值 g...

C語言實現檔案字元替換

包含 fopen fclose 檔案開啟與關閉函式 引數與返回型別省略 fgetc fputc 從流中獲取字元,向檔案流中寫入字元 getc putc 與fgetc fputc 等價,不同的是,當getc putc 定義為巨集時,可能多次計算stream的值 getchar putchar 與上述兩...