0

我正在尝试将用户输入字符串分解为不同的变量。用户字符串的确切格式必须是“星期二 6:40 PM”。我编写了程序,以便一旦循环到达第一个空格,其余变量将被填充,因为只有日期名称的长度不同。我已经尝试了几次,似乎无法获得任何输出。有人知道为什么吗?

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);

    }
4

2 回答 2

2

将单个分配char给 anstd::string是可以的。但是您有许多默认构造的字符串,然后您尝试将元素分配给 usingoperator[]和索引。但它们的大小都是 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
于 2013-03-07T22:07:23.077 回答
1

这将创建一个长度为 0 的字符串。

string hour;

不会改变字符串的长度

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

如果您需要字符串为特定长度,请调用std::string::resize()

于 2013-03-07T22:06:51.967 回答