C ++ String Сравнить - PullRequest
       1

C ++ String Сравнить

1 голос
/ 22 сентября 2011

У меня есть 2 строки: in, которая содержит ссылку, первоначально введенную пользователем (предположим, что это «http://google.com/test"), и found», которая уже была найдена посторонней частью этой программы.

Цель этой функции - сравнить секцию строки между http:// и /test, то есть: "google.com"

Проблема, с которой я сталкиваюсь, заключается в том, что цикл не добавляет к строке сравнения, таким образом, более поздняя попытка сравнить 2 строки в программе во время выполнения.

bool isLinkExternal(string in, string found)
{
    string compare = "";
    bool isExternal = false;

    //Get domain of original link
    for (int i = 6; in[i] != '/'; i++)
    {
        compare += in[i];
    }

    system("pause");

    //Compare domains of original and found links
    if (found.compare(7,compare.length(),compare) != 0)
        isExternal = true;

    return isExternal;
}

Ошибка:

Необработанное исключение типа «System.Runtime.InteropServices.SEHException» произошло в ParseLinks.exe

Строка кода, на которую он указывает:

if (found.compare(7,compare.length(),compare) == 0)

Фиксированный код (рабочий):

bool isLinkExternal(string in, string found)
{
    const int len = found.length();
    int slashcount = 0;
    string comp;

    //Parse found link
    for (int i = 0; i != len; i++)
    {
        //Increment when slash found
        if (found[i] == '/')
        {
            slashcount++;
        }

        if (slashcount < 3)
        {
            comp += found[i];
        }
    }

    //Compare domains of original and found links
    if (in.compare(0,comp.length(),comp) == 0)
        return false;
    else
        return true;
}

Ответы [ 2 ]

4 голосов
/ 22 сентября 2011
(int i = 6; in[i] != '/'; i++)
{
    compare += in[i];
}

Вы имели в виду это?

for (int i = 6; in[i] != '/'; i++)
{
    compare += in[i];
}

В настоящее время в вашей строке нет семи символов, поэтому ваш compare недействителен.Фактически, в любом случае вам нужно будет добавить некоторые проверки границ.

Кроме того, текст исключения подразумевает, что вы на самом деле пишете C ++ / CLI, а не C ++.Я прав?

0 голосов
/ 22 сентября 2011

Работает ли это лучше:

for (int i = 7; in[i] != '/'; i++)
{
compare += in[i];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...