2015-07-22 39 views
1

我試圖做一個函數,過濾出一個句子中的所有標點和空格,並只返回新字符串中的字母和數字。功能不返回所需的字符串

ex。如果我輸入:嗨,我的名字是Zach1234。 我希望它只返回:himynameiszach1234

但它只是返回只有第一個字母。 有關如何解決此問題的任何想法?

#include <iostream> 
#include <cctype> 
using namespace std; 

string filter(string str) 
{ 
    string result = ""; 
    for(int i = 0; i < (str.size()-1); i++) 
    { 
     if(isspace(str[i]))continue; 
     if(ispunct(str[i]))continue; 
     if(isdigit(str[i]))result += str[i]; 
     if(isalpha(str[i]))result += str[i]; 
    } 
    return(result); 
} 


int main() 
{ 
    string happy; 

    cout <<"Please enter a string\n"; 
    cin >> happy; 

    cout << filter(happy) << endl; 

    return(0); 
} 
+1

首先你應該使用'getline()'來讀入輸入中的空格。 – NathanOliver

+0

@NathanOliver正是這個問題,你應該發表一個答案 – vsoftco

+0

它不會讓我接受我自己的答案兩天 –

回答

1

問題是cin >> happy;是不是在所有的輸入讀取。 >>運算符將停止在它讀取的第一個空格字符處並將其保留在流中。相反,您需要使用std::getline()

std::getline(std::cin, happy) 

這將從流的內容存儲到happy,直到它到達一個新行或文件的末尾。如果它在新行中讀取,則不會將其添加到字符串中,但會被丟棄。混合>>和`getline()雖然:Need help with getline()

您需要注意,正如user5141375所述,您的for循環也是incorect。 size()返回字符串中的字符數,因此您需要循環到i < str.size()而不是i < str.size() - 1

0

問題已解決。我應該使用getline()而不是cin。

1
cin >> happy; 

此代碼讀取你輸入一個字符,直到得到一個空間,所以如果你鍵入:

嗨,我的名字是Zach1234

您將獲得:

嗨;

對於這個循環,

for(int i = 0; i < (str.size()-1); i++) 

的條件應該是:i < str.size()i <= str.size() - 1

+0