用指針對文字進行字串替換操作

2021-08-15 10:09:03 字數 4371 閱讀 9099

指標是c語言的精髓,用指標進行文字內容解析等處理在開發過程中非常常見,這裡我寫了乙個」指針對文字進行字串替換操作的**「,作為練習。

用vs2017環境編譯,因為本人偏愛日誌除錯的方法,所以**裡日誌列印內容佔了一定的行數。**執行前要在對應目錄(見**裡的巨集定義)下建立文字文件,用於除錯。

file operation by pointer.c **

#include "stdafx.h"  

#define srcpath "e:\\ccode\\test1\\replace src file.txt"

#define dstpath "e:\\ccode\\test1\\replace dest file.txt"

#define logpath "e:\\ccode\\test1\\log.txt"

#define pre_replace_string "emperor"

#define aft_replace_string "emperor"

int main()

else

//用檔案控制代碼讀取需要做字串替換處理的原始檔內容,並放置於before_process_content[max_unit]中

char before_process_content[max_unit] = ;

char after_process_content[max_unit] = ;

readsize= fread(before_process_content, 1, srcsize, fp_srcfile);

if (0 == readsize)

else

printf("content of source file is : [%s]", before_process_content);

//檔案控制代碼用完後需要關閉並置null

if (fp_srcfile != null)

//處理檔案內容,將before_process_content處理成after_process_content

if (0 != contentprocess(before_process_content, srcsize, after_process_content))

else

//處理後的檔案內容寫入目標檔案中

memset(szname, 0, sizeof(szname));

strcpy_s(szname, max_name, dstpath);

//用檔案控制代碼開啟需要儲存字串替換處理後結果的檔案

err = fopen_s(&fp_dstfile, szname, "at+");

if (0 != err)

else

if (fp_dstfile != null)

else

//檔案控制代碼用完後需要關閉並置null

fclose(fp_dstfile);

fp_dstfile = null;

} return 0;

}//獲取此刻時間用於日誌列印

void get_local_time(char* buffer)

// 寫日誌檔案

int write_log_file(char* filename, char* buffer, int buf_size)

; get_local_time(now);

//將日誌所有內容寫入logcontent,以備列印到日誌檔案中

snprintf(logcontent, max_log, "time:%s %s\n", now, buffer);

//呼叫檔案控制代碼fp_log開啟日誌檔案logpath

err = fopen_s(&fp_log, (char*)filename, "at+");

if (0 != err)

if (fp_log != null)

else

return -1;

return 0;

}int contentprocess(char* inbuffer, int size, char* outbuffer)

; char dst_string[32] = ;

strcpy_s(src_string, sizeof(pre_replace_string), pre_replace_string);

strcpy_s(dst_string, sizeof(aft_replace_string), aft_replace_string);

char* p;

char logbody[max_log];

snprintf(logbody, max_log, "line:[%d] entering contentprocess procedure, contentsize:[%d]", __line__, size);

write_log_file((char*)logpath, logbody, strlen(logbody));

//搜尋第乙個被替換字串

memcpy(outbuffer, inbuffer, strlen(inbuffer));

p = strstr(outbuffer, src_string);

//用while迴圈去 搜尋 替換 計數

while (p)

if (0 == count) //搜尋第乙個被替換字串就失敗,未進入while迴圈

else

return 0;

}void str_replace(char * cp, int length_of_srcstr, char * dst_str)

*(tmp - (length_of_srcstr - length_of_dststr)) = *tmp; //把末尾的 '\0' 也要移動

} else

//若被替換字串的長度小於替換字串的長度,在替換操作裡原始檔內容部分需要整體往後移動

if (length_of_dststr> length_of_srcstr)

}//在之前移動產生的位置裡填上替換字元

memcpy(cp, dst_str, length_of_dststr);

}

標頭檔案stdafx.h

#include "targetver.h"  

#include #include #include#include#include#include#include#define max_log 256

#define max_name 128

#define max_unit 10240

int write_log_file(char* filename, char* buffer, int buf_size);

int contentprocess(char* inbuffer, int size, char* outbuffer);

void str_replace(char * cp, int length_of_srcstr, char * dst_str);

選取一篇翻譯界佳作(英文版出師表)來作為測試文字內容,將emperor替換為e mperor

replace src file:

replace dest file:

測試日誌:

time:2018-01-05 22:09:06 line:[36] open file [e:\ccode\test1\replace src file.txt] succ.

time:2018-01-05 22:09:06 line:[52] read file [e:\ccode\test1\replace src file.txt] succ.

time:2018-01-05 22:09:06 line:[178] entering contentprocess procedure, contentsize:[2335]

time:2018-01-05 22:09:06 line:[201] [emperor] is replaced by [emperor], replace count number is :[12].

time:2018-01-05 22:09:06 line:[73] content process succ!

time:2018-01-05 22:09:06 line:[91] open file [e:\ccode\test1\replace dest file.txt]succ.

time:2018-01-05 22:09:06 line:[106] wtite file to [e:\ccode\test1\replace dest file.txt] succ.

對文字中的字串進行排序(C語言)

對文字中的字串進行排序,文字中一行乙個字串。include include define limt 100 一行文字的最大長度 define maxlen 10000 define maxline 1000 char string maxlen 存放所有的字串 char linesp maxline...

C語言提高 2 第二天 用指針對字串進行操作

2 昨日回顧 把位址轉換成整型 加上它所指向的資料的大小 3指標成立條件和間接賦值 條件一 有兩個變數 其中至少乙個是指標 條件二 建立關聯 條件三 間接操作 4間接操作的例子 5間接操作的記憶體四區圖 6 指標做為函式引數的意義 7指標的總結 8字串 指標和陣列名的區別 1.sizeof 2.st...

使用指標的指針對字串排序

1 note your choice is c ide 2 include stdio.h 3 include string.h 4 使用指標的指針對字串排序 5 排序是按照漢字的首字母進行 6 7 整體思路 1 輸出排序前的陣列元素89 2 輸出排序後的陣列元素 1011 12 自定義函式sort...