используя функцию getline для разбора строки в c ++ [duplicate]

0

Я работал над проектом, который вводит пользовательский ввод в формате даты, например "05/10/1996", а затем анализирует его на три целых числа. Один за месяц, один на день и один на год. Я смотрел на функцию getline(), но не был уверен, как использовать ее для одновременного анализа нескольких объектов. Есть ли способ сделать это с циклом while? Если это так, я был бы признателен, если бы какая-то помощь заставила меня застрять на этом.

  • 2
    См. Stackoverflow.com/questions/236129/how-to-split-a-string-in-c о том, как разбить строку на токены (в этом случае вы должны использовать «/» в качестве разделителя).
  • 0
    хорошо, спасибо, я проверю это
Теги:
parsing

2 ответа

1

Вот один из способов -

void split(std::vector<std::string> &tokens, const std::string &text, char sep) {
    int start = 0, end = 0;
    while ((end = text.find(sep, start)) != std::string::npos) {
        tokens.push_back(text.substr(start, end - start));
        start = end + 1;
    }
    tokens.push_back(text.substr(start));
}

Применение -

int main(int argc, const char * argv[]) {

    std::vector<std::string> tokens;

    std::string *text = new std::string("05/10/1996");

    split(tokens, *text, '/');

    int first = atoi(tokens[0].c_str());
    int second = atoi(tokens[1].c_str());
    int third = atoi(tokens[2].c_str());

    std::cout<<first<<std::endl;
    std::cout<<second<<std::endl;
    std::cout<<third<<std::endl;

    while (true);

    return 0;
}

Что выводит это на консоль с использованием целочисленных переменных -

5 10 1996

Для расширенного решения/обсуждения - обратитесь к этому вопросу.

0
int m,d,y;
char dummy;
cin >> m >> dummy >> d >> dummy >> y;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню