Правильная реализация для функции find () строки? - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь сделать pu sh удваивается в стек, учитывая строку от стандартного ввода и до EOF. Строка может состоять из двойных, целых, символов и одинарных пробелов.

В настоящее время я использую функцию substring и find () для учета пробелов. Он работает большую часть времени, но для различных входных данных, в которых читается одно целое (показано ниже), функция find (), похоже, забивает любой конечный символ.

Я пытался использовать различные строковые функции, чтобы попытаться повторно реализовать способ синтаксического анализа ввода - ни одна из которых не была успешной.

while(std::getline(std::cin, string, '\n')){

 for(unsigned int x = 0; x < string.size(); x++){

   std::cout << "You read " << string[x] << std::endl;

   if(isdigit(string[x])){
     do{
      // Get the number, stopping at the first instance of ws
      std::string get_str = string.substr(x, string.find(' '));
      std::cout << "You're converting " << get_str << std::endl;

      // Convert it to a double
      double num = stod(get_str);
      std::cout << "You pushed " << number << std::endl;

      // Push it to the stack
      stack.push(number);

      // Get the new increment
      std::cout << "The size is " << get_str.size() << std::endl;
      x+= get_str.size();
     } while(string[x] >= '0' && string[x] <= '9');
   }
   /* else, do other things... */

При вводе

100 200 + 2 /

Вывод:

You read 1
You're converting 100
You pushed 100
The size is 3
You read 2
You're converting 200
You pushed 200
The size is 3
You read +
You read  
You read 2
You're converting 2 /
You pushed 2
The size is 3

В частности, мне интересно, почему от 3-й до последней строки 'You're converting 2 / ' включает '/', когда я использовал string.find(' ') в моем коде как разделитель. И учитывая эту проблему, как бы я мог исправить это так, чтобы только 2 были «преобразованы»?

Любая помощь и отзывы приветствуются!

1 Ответ

0 голосов
/ 20 апреля 2020

Один параметр find начнет поиск в начале строки и вернет индекс совпадающего символа. Второй параметр substr - это количество символов. Соедините их с вашим вводом, и вы получите подстроку из 3 символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...