2013-03-07 177 views
0

我試圖將用戶輸入字符串分解爲不同的變量。用戶字符串的確切格式必須是「星期二晚上6點40分」。我編寫了程序,以便一旦循環遇到第一個空格,其餘的變量將被填充,因爲只有天名稱的長度不同。我試了幾次,似乎無法獲得任何輸出。任何人都知道爲什麼?無法將字符分配給字符串變量

void input(Time & time){ 
    string inputTime; 
    string charholder; 
    string day; 
    string hour; 
    string minute; 
    string amPm; 

    cout << "Enter a day and time: "; 
    getline(cin, inputTime); 

    for (int i = 0; i < inputTime.length() ; i++) { 

     charholder = inputTime[i]; 
     cout << i << endl; 

     if (charholder != " ") { 
      day[i] = inputTime[i]; 
     } 

     else { 
      hour[0] = inputTime[i+1]; 
      minute[0] = inputTime[i+3]; 
      minute[1] = inputTime[i+4]; 
      amPm[0] = inputTime[i+6]; 
      amPm[1] = inputTime[i+7]; 
      break; 
     } 
    } 

    cout << day << hour << minute << amPm; 
} 

編輯:正確的代碼:

void input(Time & time){ 
    string inputTime; 
    char charholder; 
    string day; 
    string hour; 
    string minute; 
    string amPm; 

    cout << "Enter a day and time: "; 
    getline(cin, inputTime); 

    int i = 0; 

    while (charholder != ' ') { 

     charholder = inputTime[i]; 
     i++; 
    } 

    day = inputTime.substr(0,i); 
    hour = inputTime.substr(i,1); 
    minute = inputTime.substr(i+2,2); 
    amPm = inputTime.substr(i+5,2); 

    } 
+0

爲什麼你有這麼多串... – Rapptz 2013-03-07 22:07:22

+5

你的代碼被完全打破,太多的問題 – nogard 2013-03-07 22:07:37

回答

1

這將創建長度爲0

string hour; 

一個字符串,這個不會改變字符串的長度。

hour[0] = inputTime[i+1]; 

如果你需要的字符串是一個特定的長度,請致電std::string::resize()

2

分配一個charstd::string是OK。但是,您有許多默認構造的字符串,然後嘗試使用operator[]和索引來分配元素。但他們都是0號,所以這些地點是無效的。

std::string foo; // empty string 
foo[0] = 'x': // Oops! foo[0] holds for the null-termination character. Modifying is UB 
foo[1] = 'x': // Oops! foo[1] is out of bounds 
+0

難道有所作爲,如果我分配的內存時,我聲明變量,即,「串天[10]。 「? – user1681673 2013-03-07 22:30:48

+0

@ user1681673這將是一個字符串數組。也許你想要一個特定大小的字符串?例如,'std :: string foo(5,'x')'使得每個字符都是一個'x'的大小爲5的字符串。 – juanchopanza 2013-03-07 22:38:50

+0

啊,明白了。我對C++很陌生,對C更有用。感謝您的幫助。 – user1681673 2013-03-07 22:41:46

相關問題