我认为这是一件相对简单的事情:将“www.google.ie”附加一个尾部斜杠,并将其与“http://”预先挂起,从而生成一个值为“http”的字符串://www.google.ie/”。不,这不是作业......(我知道)
现在这是我的代码:
std::string line=split1[0]; //split1[0] is "Host: www.google.ie"
std::vector<std::string> split2;
boost::split(split2,line,boost::is_any_of(" "));
boost::erase_all(split2[1],"\n");
std::cout<<"split2[1]:"<<split2[1]<<std::endl; //outputs www.google.ie ok
fURL="http://"+split2[1]+"/";
//fURL="http://www.google.ie/"; //this is what I want fURL to be!
std::cout<<std::endl; //just for some testing
std::cout<<std::endl;
std::cout<<std::endl;
std::cout<<std::endl;
std::cout<<std::endl;
std::cout<<"fURL:"<<fURL<<std::endl; //should output: http://www.google.ie/?
这是我奇怪的输出:
split2[1]:www.google.ie /URL:http://www.google.ie
我不知道'/ URL:'中的'/'来自哪里。就好像我指定的尾部斜线以某种方式被添加到前面。我真的不明白这是怎么可能的......
在Linux Ubuntu上使用g ++ 4.5.2。
非常感谢任何见解。
非常感谢,
答案 0 :(得分:6)
我猜这行
// split1 [0]是“Host:www.google.ie”
与你说的不同。如果你通过http获得它,例如你将
删除\ n后// split1 [0]是“主持人:www.google.ie \ r \ n”
是
// split1 [0]是“Host:www.google.ie \ r”
然后是fURL
卷起= “HTTP://” + split2 [1] + “/”; // http://www.google.ie \ r /
此
std::cout<<"fURL:"<<fURL<<std::endl
将打印
卷起:HTTP://www.google.ie
转到第一列(\ r \ n) 并打印'/'覆盖第一个字符'f'
答案 1 :(得分:1)
这是你的代码,放入一个小程序,只需要调用包含在foo()函数中的代码。它可以像你期望的那样工作,并且没有像你观察到的那样奇怪。如果我遇到像你这样的问题,我总是只用那些奇怪的代码写一个小程序。#34;怪异的#34;。正如其他人所建议的那样,必须有其他东西,那就是让事情出错。试试吧:
#include <iostream>
#include <vector>
#include <string>
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/erase.hpp>
using namespace std;
void foo(const char **split1)
{
std::string line = split1[0]; //split1[0] is "Host: www.google.ie"
std::vector<std::string> split2;
boost::split(split2,line,boost::is_any_of(" "));
boost::erase_all(split2[1],"\n");
std::cout<<"split2[1]:"<<split2[1]<<std::endl; //outputs www.google.ie ok
string fURL="http://"+split2[1]+"/";
//fURL="http://www.google.ie/"; //this is what I want fURL to be!
std::cout<<std::endl; //just for some testing
std::cout<<std::endl;
std::cout<<std::endl;
std::cout<<std::endl;
std::cout<<std::endl;
std::cout<<"fURL:"<<fURL<<std::endl; //should output: http://www.google.ie/?
}
int main()
{
const char *split = "Host: www.google.ie";
const char *split1[1];
split1[0] = split;
foo(split1);
return 0;
}