2013-06-01 59 views
0

所以現在我試圖編寫一個需要用戶輸入日期的程序,如下所示:02/04/1992,輸出日期是這樣的:1992年4月2日。而不是像程序中的字符串或其他類似的日期,我有一個文本文件,其日期列表如下:試圖從文本文件中讀取一個列表,然後搜索文本文件,然後在C++中提取一個字符串

01年1月

02February

03March

.. 等等。

我知道我必須使用string.find(),但我不知道我應該使用什麼參數。到目前爲止,我有這樣的:

// reading a text file 
#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

int main() 
{ 
    string thedate; //string to enter the date 
    string month; // this string will hold the month 
    ifstream myfile ("months.txt"); 
    cout << "Please enter the date in the format dd/mm/yyyy, include the slashes: " << endl; 
    cin >> thedate; 

    month = thedate.substr(3, 2); 
    string newmonth; 

    if (myfile.is_open()) 
    { 
     while (myfile.good()) 
     { 
      getline (myfile,newmonth); 

      cout << newmonth.find() << endl; 

     } 
     myfile.close(); 
    } 

    else cout << "Unable to open file"; 

    return 0; 
} 

我檢查查找功能在線,但我還是不明白,我會用什麼參數。現在在我的程序中,格式爲mm的月份存儲在字符串month中;我無法弄清楚如何在月份內查找文本文件,並返回該行的其餘部分。例如,05將成爲May。我還沒有學習過陣列,所以如果我可以遠離這些陣容,那就太棒了。

謝謝。

+0

[cppreference.com](http://en.cppreference.com/w/cpp/string/basic_string/find)很好地解釋了'std :: string :: find()'的參數。 –

+0

@CaptainObvlious我新編程,所以我真的不明白什麼std :: npos等意味着在他們的代碼?無論哪種方式,我都看不到任何解釋如何使用字符串作爲參數來搜索某些東西的東西。 –

回答

0

不需要使用find。

while (myfile.good()) 
{ 
    getline (myfile,newmonth); 
    if (newmonth.substr(0,2) == month) { 
     cout << newmonth.substr(2) << endl; 
    } 
} 
+0

老兄非常感謝。爲了理解那裏正在發生的事情,因爲在那裏它經歷了一個完整的列表,那麼if語句是否試圖將文本文件中的每一行與月份進行匹配? –

+0

是的,如果你確定前2個字母是數字,並且用戶輸入兩個數字,則足以比較字符串,或者可以在通過atoi將字符串轉換爲整數後進行比較。 – jof4002

0

我想我會安排不同的事情有點。我會在整個文件(顯然是12行)中讀取數據,使用數字來確定數組中存儲關聯字符串的位置。然後,當用戶輸入日期時,只需使用他們的編號索引到該數組中而不搜索它。

int number; 
std::string tmp; 

std::vector<std::string> month_names(12); 

while (myfile >> number) { 
    myfile >> tmp; 
    month_names[number] = tmp; 
}; 

std::string get_name(int month) { 
    return month_names[month]; 
} 
相關問題