簡體   English   中英

用文本替換占位符 - C?

[英]Replace placeholders with text - C?

我使用下面的函數從FILE流中逐個檢索字符。 現在該文件中的文本有時會包含像!first_name這樣的地方持有者! 在文中。 什么是檢測何時這樣的占位符開始以及何時結束以便我可以在每個角色之間交換的最佳方法! 從另一個存儲具有適當的特征?

void print_chars(FILE *file) {
        fseek(file, 0L, 0);
        int cr;

        do {
              cr = fgetc(file);
              putchar(cr);
        } while (cr != EOF);
}

首先使用fgets()一次讀取行,然后(假設占位符中沒有空格或換行符),使用strchr()找到第一個感嘆號,使用另一個找到第二個感嘆號,然后使用strcpsn()strspn()以確保它們之間只出現允許的字符。 然后寫下第一個感嘆號和替換文本之前的內容,然后繼續掃描同一行上的更多占位符。

構造一個有限自動機又名狀態機?

您也可以采用更原始的方法,一次只能讀取1個字符,然后在char =='!'時斷開 然后構建一個字符串直到另一個'!' 然后只需將該字符串與您的替換列表進行比較..

@ goe的回復要說推一個char ..這里有一些代碼


//c is char read from file
if(c=='!'){
  char str[100];
  c=fgetc
  int i=0;
  while(c!='!'){
    str[i]=c;
    i++;
    c=fgetc
  }
  i++;
  str[i]='\0'; //null terminate
  if(strcmp(str,"....")... //continue... 
}

如果你想要一些可靠處理角落情況的東西,可以考慮使用像Lex或re2c這樣的真實詞法分析工具。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM