2012-01-23 51 views
4

我想弄清楚如何使用這個功能。我在網上發現它,顯然它會檢查你的字符串是否有空格。所以它不適合我。我發現我甚至沒有進入我需要的if語句。如何在C++中使用isspace函數?

for (i=0;i < marks.length();i++) 
{ 
    if (isdigit(marks[i])) 
    { 
     floatMARK = 1; 
    } 
    else 
    { 
     charMARK = 1; 
    } 
} 

if (floatMARK == 1) 
{ 
    printf("were in."); 
    for (i=0;i < marks.length();i++) 
    { 
     if (isspace(marks[i])) 
     { 
      multiMARK = 1; 
      printf("WE HAVE A SPACE!!"); 
     } 
    } 

} 

任何人都知道我在做什麼錯了?如果你需要我澄清任何事情,請告訴我。

+0

我的錯誤之上。非常感謝,因爲我沒有明顯的哈哈。 – Robolisk

+0

我不明白我爲什麼有-2? 我做了什麼錯D:? – Robolisk

+2

¤只要你對英文字母表有限制(如果你是),我什麼都看不到*技術上*錯誤。但是,使用整數作爲布爾標誌,而不是僅使用C++'bool'變量,例如使用'printf'而不是C++ iostreams(在初學者的程序中),似乎表明你有第一次學習C的負擔。如果是這樣,那麼你需要專注於解除C和學習C++,這是一個*不同的語言*。哦,順便說一下,是否可以用沒有數字的輸入測試代碼?然後空間不會被檢測到。乾杯&hth。, –

回答

12

只需測試一個字符串是否有空格就行了。這就是你需要:

#include <ctype.h> 

bool hasspace = std::find_if(str.begin(), str.end(), ::isspace) != str.end(); 

::是範圍解析操作指定isspace是一個全球性的功能,而不是類似命名的std::isspacefind_if裏面std::功能。如果你使用using namespace std;,那麼你不需要std::,但你仍然需要簡單的::

find_if函數將一個迭代器帶到字符串的開頭,一個迭代器到字符串的末尾,一個函數接受一個參數並返回一些可轉換爲bool的值。 find_if從第一個迭代器迭代到第二個迭代器,將當前項的每個值傳遞給您提供的函數,並且如果函數返回true,find_if返回導致函數返回true的迭代器。如果find_if完成並且函數永不返回true,那麼它會將迭代器返回到範圍的末尾,在這種情況下爲str.end()

這意味着,如果find_if回報str.end(),它得到的字符串的結尾沒有isspace回到true,這意味着有字符串中沒有空格字符。因此,您可以針對str.end()測試find_if的結果;如果它們不相等(!=),則表示字符串中有空格,並且hasspacetrue。否則,hasspacefalse

+0

現在看到了,你告訴我的是複雜的方式,你剛纔給我看到的是「更容易」,看起來更加複雜,我甚至都不明白髮生了什麼,首先,「::」第二,我不明白「std :: string :: npos;」在做什麼,或者他們在做什麼(考慮到我不知道是什麼) – Robolisk

+0

@MichaelGoldshteyn謝謝你的提醒,那個人總是會迷惑我 –

+0

@KerrekSB是的,這就是我的意思,修正 –

0

這裏是另一種方式,如果上面的版本似乎很奇怪,或者是你的知識

if(marks[i] == ' ') { 
cout<<"Space found!"; 
} 
+5

這不等於。 'isspace()'檢查它的參數是否是任何空格字符;其中包括空格字符以及「\ f'','\ n'',''\ r'',''\ t''和''\ v''(可能還有其他字符,具體取決於區域設置)。 –