Найти строку внутри строки / другой способ установить значения из cin? - PullRequest
0 голосов
/ 13 марта 2020

задача, которую я имею под рукой:

Когда пользователь вводит строку

config.min=//some number
config.max=//some number
config.some_other_parameter=//some number

Мне нужно определить тип рассматриваемого параметра (min, max, et c ...), и извлеките число за знаком =.

Поиск строки с помощью str.find приходил мне в голову (например, position = str.find("config.min="), и найти символ позади нее), но затем число может состоять из 2 или более цифр, и все готово.

Я пришел из семестра C, поэтому я не знаком со всеми функциями c ++. Есть ли способ обойти это? Или мне действительно нужно просмотреть строку, как это? Спасибо!

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Вы на правильном пути с std::string::find(), но я бы посоветовал искать только символ = сам по себе. Затем используйте std::string::substr() для извлечения частей имени и значения, например:

std::string str = ...;

std::string::size_type position = str.find('=');
std::string name = str.substr(0, position);
std::string value = str.substr(position+1);

if (name == "config.min") {
    ...
}
if (name == "config.max") {
    ...
}
if (name == "config.some_other_parameter") {
    ...
}
...

Затем вы можете использовать name и value при необходимости.

0 голосов
/ 13 марта 2020

Проверьте этот код: (он сохранит числа в num [i].)

#include <iostream>
#include <string>
using namespace std;

int main(){
 string str;
 //if user input space between string, you have to use getline
 getline(cin,str);
 int pos=0;
 string str_temp;
 int num[3];

 for(int i=0;i<3;i++){
    pos = str.find("=",pos+1);
    str_temp = str.substr(pos+1);
    num[i] = stoi(str_temp);
 }

cout<<num[0]<<endl<<num[1]<<endl<<num[2];
return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...