2013-10-07 71 views
-3

說我正在接受一個字符串,並且想檢查它是否在字符串中有一個大寫字母。我從文件輸入字符串。我將如何去分解它來檢查使用ascii值是否有大寫值?謝謝!C++檢查字符串

+0

'的std :: find_if':http://en.cppreference.com/w/cpp/algorithm/find – us2012

+0

請添加你已經嘗試什麼,以及一段代碼給你帶來麻煩。 http://stackoverflow.com/help/how-to-ask –

+0

我還沒有嘗試過任何東西,因爲除了可能將其作爲字符數組使用以外,我無法想到任何其他內容,但這是很大的開銷。 – user2311799

回答

0

您可以使用C++算法庫找到,如果一個字符串包含在它的大寫值通過使用謂詞(使用std的包裝版本:: isupper):

#include <algorithm> 
#include <iostream> 
#include <string> 
#include <cctype> 

bool IsUpper (char c) { 
    return std::isupper(c); 
} 

bool hasUpperCase (std::string str) { 
    std::string::iterator it = std::find_if(str.begin(), str.end(), IsUpper); 
    if (it != str.end()) { 
     return true; 
    } 
    else { 
     return false; 
    } 
} 

int main() { 
    std::string s = "This contains an uppercase character in it..."; 
    if (hasUpperCase(s)) { 
     std::cout << "String s contains a least one uppercase character." << std::endl; 
    } 
    else { 
     std::cout << "String s does not contain any uppercase character." << std::endl; 
    } 
} 

here謂語是:

是一個C++函數,返回布爾型或具有bool operator()成員的對象實例。一元謂詞取一個agrument,二 - 二, 等問題謂詞的例子可以回答特定 算法有:

  • 是這個元素就是我們正在尋找的?
  • 兩個參數中的第一個是按照我們的順序排在第一位的嗎?
  • 兩個參數是否相等?

幾乎所有的STL算法都以謂詞作爲最後一個參數。

因此,簡言之,這部作品由每個角色對謂詞函數的字符串:IsUpper本身使用std::isupper做檢查,看看是否有問題的字符是大寫或沒有。如果是,則返回true,並將該字符存儲在迭代器中。

參考:

http://en.cppreference.com/w/cpp/algorithm/find https://stackoverflow.com/a/5921826/866930

+0

您需要真正檢查查找是否成功。 –

+0

我無法從這段代碼中獲得太多。 – user2311799

+0

@BenjaminLindley:編輯。 – jrd1