2013-03-31 52 views
-1

任何人都可以幫助我嗎?在代碼中,我沒有像所示的那樣擦除標點符號,我需要將它剝離出來,以便稍後再次使用,因爲它之前的單詞已從其縮略形式擴展。任何幫助將不勝感激。 N.B這只是代碼的一個功能,用於顯示矢量並打開infile等......已被放置在單獨的函數中。在C++中保留標點符號

void readText2(ifstream &infile, vector <string> &textFile2) 
{ 
    while(!infile.eof()) 
    { 
     string fileWord; 
     infile >> fileWord; 
     for (size_t i=0; i !=fileWord.length(); i++) 
     { 
      fileWord[i]=toupper(fileWord[i]); 
     } 

     for (size_t i=0; i < fileWord.length(); i++) 
     { 
      if (ispunct (fileWord[i])) 
      { 
       fileWord.erase(i); 
      } 
     } 
     textFile2.push_back(fileWord); 
    } 
    infile.close(); 
} 
+3

目前還不清楚你在做什麼。你能提供一個你想要解決的問題的總體高層次的描述嗎? –

+0

我正在通過字符串讀取infile字符串到字符串fileWord中,而不是將它存儲在字符串末尾的標點符號中,因此我希望它將其取出並存儲在其他地方,因此v​​ar fileWord將只保存字母而不是標點符號。 – maccame

+0

所以你不需要標點符號?你正在解決什麼問題? – DavidO

回答

0

我建議遍歷字符串結束到開始(保留正確的索引號),並循環存儲索引+標點符號charactar在的std ::地圖<爲size_t,焦炭>

你砍死功能與評論,其中的東西改變了:

// changed return type 
vector<map<size_t,char>> readText2(ifstream &infile, vector <string> &textFile2) 
{ 
    vector<map<size_t,char>> vPunct; // added 

    while(!infile.eof()) 
    { 
     string fileWord; 
     infile >> fileWord; 
     for (size_t i=0; i !=fileWord.length(); i++) 
     { 
      fileWord[i]=toupper(fileWord[i]); 
     } 

     map<size_t,char> mPunct;  // construct a map 
             // map stays empty if no punctuation is found 

     for (size_t i=fileWord.length()-1; i>=0 ; i--) // reversed loop 
     { 
      if (ispunct (fileWord[i])) 
      { 
       // store index + punctuation char 
       mPunct.insert(pair<size_t,char>(i,fileWord[i]));  
       fileWord.erase(i); 
      } 
     } 
     textFile2.push_back(fileWord);  
     vPunct.push_back(mPunct);  // add map to vector 
    } 
    infile.close(); 
    return vPunct; // return vector 
} 

標點符號現在存儲在第二載體,其函數返回。例如:textFile [20]處的字符串的標點符號存儲在vPunct [20]中。

將標點符號與字符串一起存儲在一個vector<pair<string,map<size_t,char>>>中會更可靠,但這會改變函數的外部行爲,我不知道這是否適合您。

+0

是的,請這將是非常有用的:) – maccame

+0

爲你做了一個示例實現 –

+0

哇 - 謝謝你這麼多,這真的很有幫助 - 而且可以理解。 :) – maccame