我正在尝试将用户输入字符串分解为不同的变量。用户字符串的确切格式必须是“星期二下午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 :(得分:2)
将单个char
分配给std::string
即可。但是您有许多默认构造的字符串,然后您尝试使用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
答案 1 :(得分:1)
这将创建一个长度为0的字符串。
string hour;
此不会更改字符串的长度。
hour[0] = inputTime[i+1];
如果您需要字符串为特定长度,请致电std::string::resize()