C ++: странная ошибка std :: cout - PullRequest
0 голосов
/ 29 августа 2011

Я подумал, что это будет относительно просто: добавьте "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:».Это похоже на то, что указанная мной косая черта как-то прикреплена вперед.Я действительно не понимаю, как это возможно ...

Использование g ++ 4.5.2 в Linux Ubuntu.

Любое понимание высоко ценится.

Большое спасибо заранее,

Ответы [ 2 ]

6 голосов
/ 29 августа 2011

Полагаю, что эта строка

// split1 [0] - это "Host: www.google.ie"

отличается от того, что вы говорите.Например, если вы получили его по протоколу http, у вас будет

// split1 [0] - "Host: www.google.ie \ r \ n"

, которыйпосле удаления \ n равно

// split1 [0] равно «Host: www.google.ie \ r»

Тогда fURL равно

fURL = "http://"+split2[1]+"/"; // http://www.google.ie\r/

Этот

std::cout<<"fURL:"<<fURL<<std::endl

напечатает

fURL: http://www.google.ie

перейти к первому столбцу (\ r) и напечатать '/', перезаписывая первый символ 'f'

1 голос
/ 29 августа 2011

Это ваш код, помещенный в небольшую программу с помощью всего одного вызова вашего кода, заключенного в функцию foo (). Он работает так, как вы ожидаете, и не делает ничего странного, как вы наблюдаете. Если я сталкиваюсь с такой проблемой, как у вас, я всегда пишу небольшую программу только с тем «странным» кодом. Как говорят другие, должно быть что-то еще, что заставляет вещи идти не так, как надо. Вот, попробуйте:

#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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...