2016-09-08 54 views
-5

此代碼編譯和按預期工作,但註釋行沒有出於某種原因,任何人都可以告訴我爲什麼。C++通過使用迭代器刪除空格失敗

#include <iostream> 

int main() 
{ 
    std::cout << "Enter a line:\n"; 
    std::string Line; 
    std::getline(std::cin,Line); 
    const std::string Whitespace = " \t\t\f\v\n\r"; 
    //std::string Line= std::string(Line.find_first_not_of(Whitespace),Line.find_last_not_of(Whitespace)+1); // Why doesnt this work? 
    std::string Line= Line.substr(Line.find_first_not_of(Whitespace),Line.find_last_not_of(Whitespace)+1); 
    std::cout << "You entered:" << Line << "\n"; 
} 

編輯我的印象是找到拉斯維加斯返回一個迭代器不是爲size_t所以這就是爲什麼我很困惑

+0

find_first_not_of()返回什麼?看起來像索引而不是迭代器。 – Hayt

+0

「由於某種原因不起作用」。它怎麼不起作用?你在問人們猜測你的輸入和輸出。 – Matt

+1

沒有用!注意'string substr(size_t pos = 0,size_t len = npos)const;' –

回答

0

不僅註釋行,但如果有空間,在開始另一個也將失敗字符串。

第一行失敗(編譯),因爲string::find_first_not_of返回size_t。從兩個尺寸構造string只是沒有意義。

第二行可能失敗,因爲string::substr接受長度(不是結束),因爲它是第二個參數。

+0

呵呵,你不包括(或者你把它包含在編譯器設置中?) –

+0

nope不包括字符串 – Mellester