C ++ Ошибка при передаче массива в функцию и сохранении результатов? - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь создать программу, которая анализирует список 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;
}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...