2014-12-11 165 views
-1

我正在試着製作一個程序,告訴用戶輸入一個句子或其他東西。 然後,我需要查找字符串中有多少個數字,字符,所有其他字符(符號,句號,空格等)。檢查字符串的每個元素的數字或字符

爲什麼我的代碼不工作?我的事情與find_first_of一次檢查整個字符串有關,而我希望它只檢查索引「我」的位置。

[錯誤]請求構件 'find_first_of' 在「s1.std :: basic_string的< _CharT,_Traits,_Alloc> ::操作符[],標準::分配器>(((標準:: basic_string的:: size_type)i))',這是非類類型'char'是我在下面2條代碼行中得到的錯誤。

#include <iostream> 
#include <string> 


using namespace std; 

int main() 
{ 
    string s1; 
    int numbers = 0; 
    int characters = 0; 
    int others = 0; 

    cout << "Please type in Something: "; 
    getline(cin, s1); 
    cout << "You typed: " << s1 << endl; 

    for(int i = 0; i < sizeof(s1)/sizeof(string); ++i) 
    { 
     if(s1[i].find_first_of("123456789") != string::npos) // Here is where the compiler errors 
     { 
      ++numbers; 
     } 
     else if(s1[i].find_first_of("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz") != string::npos) // And here with the same error 
     { 
      ++characters; 
     } 
     else 
     { 
      ++others; 
     } 
    } 
    cout << "Total numbers in the string are: " << numbers << endl << "Total characters in the string are: " << characters << endl << "Total special characters, symbols, spaces etc... are: "<< others; 

    return 0; 
} 
+0

使用'std :: isalpha()'和'std :: isdigit()'來檢查一個字符是字母還是數字。沒有必要使用'find_first_of' – PaulMcKenzie 2014-12-11 02:58:05

+0

謝謝我的朋友,我現在就試試。順便說一句,你可以告訴我,find_first_of在這裏實際上是錯誤的嗎?就像爲什麼編譯器不接受它?編輯:我不能仍然使用is alpha或isdigit,因爲我得到相同的eroor.But如果我使用它像這樣s1.find_first_of()或s1.isdigit()而不是s1 [i] .find_first_of和s1 [i]。 isdigit()然後它可以工作,但我需要檢查每個特定的索引。所以我該怎麼做? – Johnson 2014-12-11 03:00:18

+0

我更新了我的答案,爲什麼你的方法沒有編譯。 – PaulMcKenzie 2014-12-11 03:09:06

回答

1

至於錯誤,s1[i]是單個字符,它不是一個std::string,因此試圖用它作爲一個字符串對象在調用find_first_of將無法​​正常工作(不編譯)。


你的代碼有至少其他兩個問題:

問題1:

一個std::string知道它有多少個字符已通過調用其size()方法。因此,這是錯誤的:

for(int i = 0; i < sizeof(s1)/sizeof(string); ++i) 

它應該是:

for(size_t i = 0; i < s1.size(); ++i) 

問題2:用法string::find_first_of

是沒有必要的。有確定一個字符是字母和數字的函數。

#include <cctype> 
    //... 
    if (std::isdigit(s1[i])) 
     ++numbers; 
    else 
    if (std::isalpha(s1[i])) 
     ++characters; 
    else 
     ++others; 

的std :: ISDIGIT:http://en.cppreference.com/w/cpp/string/byte/isdigit

的std ::因而isalpha:http://en.cppreference.com/w/cpp/string/byte/isalpha

+0

謝謝我的程序現在可以運行。 – Johnson 2014-12-11 03:12:07

1

存在諸多問題與代碼: 1.You不能調用find_first_of上的字符 2。 find_first_of不會幫助

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

using namespace std; 

int main() 
{ 
string s1; 
int numbers = 0; 
int characters = 0; 
int others = 0; 

cout << "Please type in Something: "; 
getline(cin, s1); 
cout << "You typed: " << s1 << endl; 

for(size_t i = 0; i < s1.size(); ++i) 
{ 
    if(isdigit(s1[i])){++numbers;}  
    else if(isalpha(s1[i])){++characters;} 
    else{ ++others;} 
} 

cout << "Total numbers in the string are: " << numbers << endl 
<< "Total characters in the string are: " << characters << endl 
<< "Total special characters, symbols, spaces etc... are: "<< others<<endl; 

return 0; 

}

+0

謝謝我的朋友。 – Johnson 2014-12-11 03:12:36

相關問題