Member 12899279 Ответов: 1

Как извлечь второе значение адреса в C++


ниже приведено строковое значение которое я получаю и я хочу сохранить второе значение адреса в переменной и n если оно возвращает только один адрес первый то оно не должно хранить этот адрес
Server:  resolver1.opendns.com
Address:  202.62.333.112

Non-authoritative answer:
Name:    myip.opendns.com
Address:  19.40.22.46


я хочу сохранить только второй адрес в переменной, которая равна 19.40.22.46

Что я уже пробовал:

istringstream is3(result);
const string Pattern = "Address:";

//result is the variable in which i wil get above output
// string line;

// const size_t Len = Pattern.length();
string ipchk;
// string line98;

while (getline(is3, line98))
{
    if (line98.find(Pattern) != string::npos)
    {

        line98.erase(0, 39);
        ipchk = line98.erase(line98.size() - 1);

        //ipchk = line98.substr(Len);
        // return line98.substr(Len);
        Ipv4 = ipchk;
        break;
    }
}
IpAddress=Ipv4;

Richard MacCutchan

И что же?
А что вы пробовали?
Где ты застрял?

Member 12899279

istringstream is3(результат);
const string Pattern = "адрес:";

//result - это переменная, в которой я получу выше вывода
// строки;

// const size_t Len = Pattern.length();
строка ipchk;
// строка line98;

while (getline(is3, line98))
{
if (line98.find(Pattern) != string::NPO)
{

line98.erase(0, 39);
ipchk = line98.erase(line98.size() - 1);

//ipchk = line98.функцию substr(лен);
// возврат line98.функцию substr(лен);
Протокол IPv4 = ipchk;
перерыв;
}
}
IP Адрес=Адрес IPv4;

этот

Richard MacCutchan

Так в чем же проблема?

Stefan_Lang

Именно такую информацию вы должны были добавить в свой вопрос с помощью кнопки [улучшить вопрос] в правом нижнем углу вашего вопроса.

На этот раз я сделал это для вас и восстановил некоторое форматирование, чтобы сделать его читабельным.

Тем не менее, этот код является неполным и не очень полезным для понимания вашей проблемы. Если вы застряли, вам следует приложить немного больше усилий, чтобы объяснить, где именно.

1 Ответов

Рейтинг:
2

phil.o

Регулярное выражение было бы идеальным для выделения второго результата:

#include <regex>

std::regex r("^Address:\s+((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4})$");
std::smatch match;
std::string address;

if (std::regex_match(result, match, r))
{
   address = match[match.size() > 1 ? 1 : 0]; // The second result, if more than one, or the first result
}


Member 12899279

он даже не входит в цикл я думаю что регулярное выражение неверно кстати спасибо за попытку

Stefan_Lang

Я не очень хорошо знаком с регулярными выражениями, но я думаю, что вы должны объединить все строки и позволить регулярному выражению извлечь результирующие адреса из многострочной строки. Петля не требуется.