簡體   English   中英

讀取文件時宏定義的有效方法?

[英]Efficient way for macro definition in reading a file?

問題描述:

我希望有這種效果。 我正在使用C ++來讀取輸入文件。 我想以這種方式設計我的輸入文件:

....blahblah.....
Define Length 20
Node ($Length 0.1 0.1)
....blahblah.....

因此$Length將自動替換為20。

我正在考慮更一般的情況:例如給定一個任意字符串

Node ($strLengthUnknown 0.1 0.1)

我首先將總字符串拆分為單詞,然后查找某些單詞是否以$符號開頭,然后進行替換。

我的問題:

我想知道有更聰明的方法嗎? 而且我不想重新發明輪子。 所以如果你知道有更好的方法/庫已經可以做到,請你告訴我。 謝謝

您可以拆分字符串 - 這個問題已被多次詢問: 在C ++中拆分字符串? 然后,您可以搜索單詞並進行替換。

但是,更簡單的方法是搜索“$”符號並檢查“$”之前的前一個字符是否屬於單詞 - 空格或示例中的括號。 我不是你文件的全部語法,但是當我們查找以字母開頭的標識符時,檢查'$'之后的下一個字符就足夠了。

    string x = "Node ($Length 0.1 0.1)";
    size_t len = x.length();
    size_t pos = 0;
    while((pos = x.find("$",pos)) != string::npos) {
        if(pos == 0 || isspace(x[pos-1]) || x[pos-1] == '(') {
            if(pos != (len -1) &&  isalpha(x[pos+1])) {
                //find the length of word, starting from pos
                //do the replacement, update pos
                x.replace(pos,word_length,string_to_replace);
                pos += word_length;
            } else {
                ++pos;
            }
        } else {
            ++pos;
        }
    }

我建議您查看現有實用程序,以便在將文件用作應用程序的輸入之前對其進行預處理。 一種這樣的可能性是C預處理器本身。 您可以在文件中使用標准的預處理程序指令,然后通過Proprocessor運行該文件,然后使用預處理器的輸出。

這取決於輸入文件的實際文本以及C預處理器是否可能存在將輸入文件中的某些文本解釋為預處理程序指令的問題。

C處理器作為獨立工具 ,也提供了一些替代方案。

或者將C預處理器用於C以外的語言

暫無
暫無

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

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