#include <stdio.h>
#include <string>
int main(void)
{
printf("%u\n", std::string("\n").find_first_not_of(" \t\n\v\f\r", 0, 1));
}
下面的程序打印0,而不是std :: string :: npos,正如我所料。爲什麼?std :: string.find_first_not_of,意外的返回值
#include <stdio.h>
#include <string>
int main(void)
{
printf("%u\n", std::string("\n").find_first_not_of(" \t\n\v\f\r", 0, 1));
}
下面的程序打印0,而不是std :: string :: npos,正如我所料。爲什麼?std :: string.find_first_not_of,意外的返回值
您的通話比賽:
size_t find_first_not_of (const char* s, size_t pos, size_t n) const;
n
是字符的小號數量,以及你傳遞1.所以,你要搜索的第一個字符不是空間。您的" \t\n\v\f\r"
字符串的其餘部分將被忽略。
有可能你只是想:
find_first_not_of(" \t\n\v\f\r")
第三個參數並不意味着你認爲它。
根據this,string::find_first_not_of
搜索對象中不屬於str,s或c的第一個字符,並返回其位置。由於「\ t」是這樣的字符,所以返回值爲0.
根據你想要打印的內容,我可以說第三個參數應該是你傳遞的字符串的長度。因此,這裏是修正版本:
#include <stdio.h>
#include <string>
int main(void)
{
std::string s=" \t\n\v\f\r";
printf("%u\n", std::string("\n").find_first_not_of(s.c_str(), 0, s.length()));
//since now I'm using std::string, you can simply write:
printf("%u\n", std::string("\n").find_first_not_of(s));
}
演示在ideone:http://ideone.com/y5qCX
看到它:
#include <stdio.h>
#include <string>
int main(void)
{
std::string s("\n");
if(s.find_first_not_of(" \t\n\v\f\r", 0, 1) != std::string::npos)
printf("%u\n", s.find_first_not_of(" \t\n\v\f\r", 0, 1));
else
puts("npos");
return 0;
}
的方法find_first_not_of
解釋最後一個參數爲char的數量在其第一考慮參數,而不是在字符串中。
size_type std::string::find_first_not_of(
const char* str, size_type index, size_type num) const;
的論點num
是str
考慮,而不是在this
數!所以在你的情況下,它只考慮" \t\n\v\f\r"
的第一個字符。你的代碼就相當於:
#include <cstdio>
#include <string>
int main(void)
{
printf("%u\n", std::string("\n").find_first_not_of(" ", 0));
}
如果你只想匹配std::string
的子,我想你必須明確的子叫find_first_not_of
,那就是:
#include <cstdio>
#include <string>
int main(void)
{
printf("%u\n", std::string("\n").substr(0, 1).find_first_not_of(" \t\n\v\f\r"));
}
BTW,here是該find_first_not_of
方法的行爲的描述:
的find_first_not_of()函數之一:
- 返回當前字符串中的第一個字符不str中的任何字符匹配的索引,從index處開始搜索,字符串::非營利組織如果沒有被發現,
- 搜索當前字符串開始處索引,對於與str中的第一個num字符不匹配的任何字符,返回符合此條件的第一個字符的當前字符串中的索引,否則返回string :: npos,
- 或返回第一個字符的索引在當前字符串中出現與ch不匹配的字符,如果沒有找到任何內容,則在index處開始搜索,string :: npos。
'#包括
哦,是的,我知道,我只是從OP複製代碼,並更新它來解釋什麼是不正確的。我沒有試圖糾正每個編碼風格錯誤。我會改變它。 – 2011-03-12 19:43:45
不可思議! – 2011-03-12 19:08:19
@James:你也擊敗了我的西班牙人,這意味着你必須學習... – 2011-03-12 19:14:29