Я пытаюсь создать программу, которая анализирует список URL-адресов и отслеживает несколько вещей о них (количество запросов, параметры и т. Д. c.). Однако я не уверен, как сохранить результаты из моей функции в массиве. Я думал, что понял это, но когда я запускаю программу, я получаю сообщение об ошибке с первой попыткой « getDomainName ». Любая помощь / советы / советы очень ценятся, так как я все еще учусь. Спасибо!
#include <iostream>
#include <fstream>
using namespace std;
namespace helpers {
size_t getDomainName(const string str, string& result);
size_t getKeyVal(const string str, const size_t start_pos, string& result);
string getKey(const string keyval);
string getVal(const string keyval);
}
using namespace helpers;
int main() {
string fileName;
string URLS[25];
string domains[25];
string results[25];
int count = 0;
string res,key,val;
size_t current = 0;
cout << "Please input the name of the file: " << endl;
cin >> fileName;
ifstream fin;
fin.open (fileName);
if (fin.is_open()){
cout << "File opened successfully...\n";
}
else {
cout << "File failed to open...\n";
return 0;
}
while (count <= 25){
fin >> URLS[count];
++count;
}
count = 0;
while(count < sizeof(URLS)){
current = getDomainName(URLS[count], res);
res = domains[count];
count++;
}
cout << domains[4];
return 0;
}
namespace helpers {
size_t getDomainName (const string str, string& res){
size_t first, second;
first = str.find('/');
first = str.find('/', first + 1);
second = str.find('/', first + 1);
res = str.substr(first + 1, second - (first + 1));
return second;
}
size_t getKeyVal(const string str, const size_t start_pos, string& result){
size_t first, second;
if(start_pos == 0) {
first = str.find('?');
}
else {
first = start_pos;
}
second = str.find('&', first + 1);
result = str.substr(first + 1, second - (first + 1));
return second;
}
string getKey(const string keyval){
size_t first, second;
string result;
first = 0;
second = keyval.find('=');
result = keyval.substr(first, second - first);
return result;
}
string getVal(const string keyval){
size_t first;
string result;
first = keyval.find('=');
first = first + 1;
result = keyval.substr(first);
replace(result.begin(), result.end(), '+', ' ');
return result;
}
}
ОБНОВЛЕНИЕ. Я немного изменил его, чтобы заставить его работать. Однако я не могу включить переменную count при вызове функции. Если я изменю счетчик на целое число (1,2,3), он напечатает домен этого URL, но мне нужно, чтобы он обновлялся каждый раз. Как я могу это сделать?
#include <iostream>
#include <fstream>
using namespace std;
namespace helpers {
size_t getDomainName( string array[], int size, int count, string& result);
size_t getKeyVal(const string str, const size_t start_pos, string& result);
string getKey(const string keyval);
string getVal(const string keyval);
}
using namespace helpers;
int main() {
string fileName;
string URLS[25];
string domains[25];
string results[25];
int count = 0;
string res,key,val;
size_t current = 0;
cout << "Please input the name of the file: " << endl;
cin >> fileName;
ifstream fin;
fin.open (fileName);
if (fin.is_open()){
cout << "File opened successfully...\n";
}
else {
cout << "File failed to open...\n";
return 0;
}
while (count <= 25){
fin >> URLS[count];
++count;
}
count = 0;
while(count < sizeof(URLS)){
current = getDomainName(URLS,25,count, res);
cout << res << endl;
count++;
}
return 0;
}
namespace helpers {
size_t getDomainName( string array[], int size, int count, string& result){
size_t first, second;
string str;
str = array[count];
first = str.find('/');
first = str.find('/', first + 1);
second = str.find('/', first + 1);
result = str.substr(first + 1, second - (first + 1));
return second;
}
size_t getKeyVal(const string str, const size_t start_pos, string& result){
size_t first, second;
if(start_pos == 0) {
first = str.find('?');
}
else {
first = start_pos;
}
second = str.find('&', first + 1);
result = str.substr(first + 1, second - (first + 1));
return second;
}
string getKey(const string keyval){
size_t first, second;
string result;
first = 0;
second = keyval.find('=');
result = keyval.substr(first, second - first);
return result;
}
string getVal(const string keyval){
size_t first;
string result;
first = keyval.find('=');
first = first + 1;
result = keyval.substr(first);
replace(result.begin(), result.end(), '+', ' ');
return result;
}
}