将std :: string的一部分复制到另一个未初始化的字符串

时间:2012-07-21 16:57:58

标签: c++ string

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

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-&gt;协议字符串中。这样做的好方法是什么?

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

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

size_t pos = announce.find("://");
if(pos != std::string::npos)
{
    protocol.insert(0, announce, 0, pos);
}

答案 2 :(得分:0)

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