<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                在1.4節,我們把“解析”定義為分析自然語言句子或形式語言語句之結構的過程。比如,編譯器在將代碼翻譯成機器語言程序之前必須先進行解析。 此外,當你從文件或鍵盤讀取輸入時,一般也需要進行解析,以提取想要的信息并發現錯誤。 例如,我有一個文件distances,其中包含了美國主要城市之間的距離信息。這些信息是我從一個隨機選擇的網頁([http://www.jaring.my/usiskl/usa/distance.html](http://www.jaring.my/usiskl/usa/distance.html))中得到的,所以數據可能不是很準確,不過這也沒什么關系。文件格式看起來是這樣的: ~~~ "Atlanta" "Chicago" 700 "Atlanta" "Boston" 1100 "Atlanta" "Chicago" 700 "Atlanta" "Dallas" 800 "Atlanta" "Denver" 1450 "Atlanta" "Detroit" 750 "Atlanta" "Orlando" 400 ~~~ 文件中的每一行包含了兩個城市的名字以及它們之間的距離,其中城市名用引號標記,距離以英里為單位。引號是有用的,因為它能讓我們很容易地處理多于一個單詞的城市名,如”San Francisco“(舊金山)。 通過搜索一行輸入中的引號,我們能找到每個城市在該行的開始和結束位置。不過查找引號這樣的特殊字符可能讓人有點困惑,因為引號是C++中用于標識字符串的特殊字符。 要找到引號第一次出現的位置,應該這樣寫: ~~~ int index = line.find (’\"’); ~~~ 參數看起來有點亂,不過它就是表示雙引號字符。最外層的單引號依然用于表示這是個字符值。反斜杠(\)說明我們想使用下一個字符的字面意義。 所以序列 \" 表示雙引號,而序列 \’表示單引號。有趣的是, 序列\\表示一個反斜杠。第一個反斜杠指示我們要認真對待第二個反斜杠。 解析輸入行由這幾部分組成:找到每個城市名在該行中的開始和結束位置,使用substr函數提取城市和距離信息。substr是apstring的成員函數之一,它有兩個參數,分別是子串的起始位置和長度。 ~~~ void processLine (const apstring& line) { // 我們要查找的字符是引號 char quote = ’\"’; // 將引號的索引保存在一個向量中 apvector<int> quoteIndex (4); // 使用內置的find函數查找到第一個引號 quoteIndex[0] = line.find (quote); // 使用第7章定義的find函數查找其他引號 for (int i=1; i<4; i++) { quoteIndex[i] = find (line, quote, quoteIndex[i-1]+1); } // 將一行的內容分割成子串 int len1 = quoteIndex[1] - quoteIndex[0] - 1; apstring city1 = line.substr (quoteIndex[0]+1, len1); int len2 = quoteIndex[3] - quoteIndex[2] - 1; apstring city2 = line.substr (quoteIndex[2]+1, len2); int len3 = line.length() - quoteIndex[2] - 1; apstring distString = line.substr (quoteIndex[3]+1, len3); // 輸出提取的信息 cout << city1 << "\t" << city2 << "\t" << distString << endl; } ~~~ 當然,我們真正想要的并不僅僅是提取并顯示信息,不過這是一個好的開始。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看