我正在尝试编写一个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];
答案 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()。您已拥有此功能所需的所有信息。