我在使用此算法时遇到问题,无法从网址中提取get变量,并将它们分别打印在新行上,如:
x=y
z=hello
等。但相反,它打印了一个看似随机的网址部分,没有文件的换行符。必定存在某种逻辑错误,但我无法发现它。
for(i_m=0;i_m<len_m;i_m++) {
if(var_m[i_m]=='&') {
fwrite(var_m+offset_m, 1, amp_m, echo_out);
fputc('\n',echo_out);
offset_m+=amp_m;
amp_m=0;
}
amp_m++;
}
任何帮助表示感谢。
编辑:
谢谢大家的意见,我纠正了错误Guss但无济于事。我想到了另一种算法,因为我不能在这个中使用c ++字符串
while((i_m=(strchr(var_m,'&')-var_m))>0) {
var_m[i_m]='\n';
}
哪个会改变每个&amp;到换行符,然后我可以将var_m写入文件,但由于某种原因,这给了我一个缓冲区溢出。
答案 0 :(得分:0)
void StringExplode(std::string &str, const std::string &separator, std::vector<string>* results){
int found;
found = str.find_first_of(separator);
while(found != string::npos){
if(found > 0){
results->push_back(str.substr(0,found));
}
str = str.substr(found+1);
found = str.find_first_of(separator);
}
if(str.length() > 0){
results->push_back(str);
}
}
答案 1 :(得分:0)
你对offset_m和amp_m的计算似乎是错误的。例如,简单的字符串“a&amp; b&amp; c” - 您的代码应该从文本中输出:
a
b
c
但如果您浏览代码,则会看到当您到达第一个&
然后offset_m=0
和amp_m=1
并且您打印a
时 - 这是好的,但当你到达第二个&
然后offset_m=1
和amp_m=2
实际打印&b
时,你就不会打印出最后一个元素。
使用像mysqlforums这样的简单字符串拆分算法是处理此任务的常用方法,但我相信你应该能够提出一个简单的循环算法来获得你所需要的东西。再考虑一下并尝试在头脑中运行算法(或使用笔和纸)试图理解它是如何工作的 - 我相信你会得到它!
如果您仍有问题,请在此处发布内容,我会再次尝试帮助。