2013-03-07 123 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

相关问题