2011-03-12 77 views

回答

5

您的通話比賽:

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") 
2

第三個參數並不意味着你認爲它。

+3

不可思議! – 2011-03-12 19:08:19

+0

@James:你也擊敗了我的西班牙人,這意味着你必須學習... – 2011-03-12 19:14:29

0

根據this,string::find_first_not_of搜索對象中不屬於str,s或c的第一個字符,並返回其位置。由於「\ t」是這樣的字符,所以返回值爲0.

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

+0

@詹姆斯:但我通過'char *' – Nawaz 2011-03-12 19:08:13

+0

'char *'以null結尾; 'find_first_not_of'可以在不顯式傳遞's.length()'的情況下確定字符的數量。 – 2011-03-12 19:10:38

+0

@詹姆斯:是的。你是對的,但我正在展示第三個論點的意義! – Nawaz 2011-03-12 19:11:37

0

看到它:

#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; 
} 
0

的方法find_first_not_of解釋最後一個參數爲char的數量在其第一考慮參數,而不是在字符串中。

size_type std::string::find_first_not_of(
    const char* str, size_type index, size_type num) const; 

的論點numstr考慮,而不是在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。
+0

'#包括'是一個壞習慣。使用'#include ' – Erik 2011-03-12 19:21:49

+0

哦,是的,我知道,我只是從OP複製代碼,並更新它來解釋什麼是不正確的。我沒有試圖糾正每個編碼風格錯誤。我會改變它。 – 2011-03-12 19:43:45