1

我正在尝试编写一个将std::string包含 URL 的 C++ 函数拆分为其组件。我需要将组件复制到这个结构中:

typedef struct urlstruct {
    string protocol;
    string address;
    string port;
    string page;
} urlstruct;

这是到目前为止的功能:

int parseAnnounce2(string announce, urlstruct *urlinfo){
    int i;

    if(announce.find("://") != string::npos){
        // "://" found in string, store protocol
        for(i = 0; i < announce.find("://"); i++){

        }
    } else {
        // No "://" found in string
    }

    return 0;
}

我需要将 '://' 序列之前的字符复制到 urlinfo->protocol 字符串中。这样做的好方法是什么?

我知道我无法使用以下代码行分配它,因为协议字符串尚未初始化为包含该内存。

urlinfo->protocol[i] = announce[i];
4

3 回答 3

5

使用std::string::assign. 这应该有效:

if (announce.find ("://") != std::string::npos)
    urlinfo->protocol.assign (announce, 0, announce.find ("://"));
else
    //not found, handle

或者,如果您想将结果存储find在变量中而不计算/键入两次,您也可以这样做:

std::string::size_type foundPos = announce.find ("://");
if (foundPos != std::string::npos)
    urlinfo->protocol.assign (announce, 0, foundPos);
else
    //not found, handle
于 2012-07-21T17:03:14.087 回答
2

std::string::insert应该在这里完成工作:

size_t pos = announce.find("://");
if(pos != std::string::npos)
{
    protocol.insert(0, announce, 0, pos);
}
于 2012-07-21T17:03:30.547 回答
0

另一种选择是使用std::string::substr()。您已经拥有此功能所需的所有信息。

于 2012-07-21T20:59:50.723 回答