2013-03-31 42 views
0

我想擦除字符串中的所有數字(最終是所有符號和空格),並將所有字母字符保留在字符串中。我試圖最終做的是從大塊文本中搜索迴文。爲什麼我不能擦除字符串的數字字符?

我現在得到的東西會清除數字;加上被擦除的第一個數字字符後的所有其他非數字字符。我想知道爲什麼這樣做,以及我能做些什麼來讓它只擦除數字字符。

#include <iostream> 
#include <string> 
#include <cctype> 
#include <ctype.h> 
#include <iterator> 
using namespace std; 

int main() 
{ 
bool con = true; 
while (con == true) 
{ 
cout << "Enter a string: "; 
string input; 
getline(cin, input); 

/** here is where I am attempting to erase all numeric characters in input string**/  
for(int i=0; i<input.length(); i++){ 

    if(isdigit(input.at(i))){ 

     string::iterator it; 
     it=input.begin()+i; 
     input.erase(i); 
    break; 
    } 
} 

string go; 

cout << input << endl; 

    cout << "Continue? y/n " << endl; 
    getline(cin, go); 
    if(go != "y") 
     con = false; 


} 
system("pause"); 
return 0; 
} 
+2

請注意,您可以結合使用'的std :: remove_if'與任何一個lambda或'STD :: not1'和'std :: isalpha'來移除除字母以外的所有字符。對於數字字符,「std :: remove_if」和「std :: isdigit」。 – chris

+0

謝謝。那麼我必須使用isalpha。 –

+0

@chris,'std :: isalpha'在這種情況下不起作用,因爲它返回一個'int',而不是'bool'。由於需要隱式類型轉換,因此在這種情況下會失敗。 –

回答

1
for(int i=0; i<input.length(); i++){ 

    if(isdigit(input.at(i))){ 

     string::iterator it; 
     it=input.begin()+i; 
     input.erase(i); 
    break; 
    } 
} 

我`噸這樣的代碼片段:決定使用迭代器或索引,我想你shoudn`t它們混合
錯誤在你的代碼:,當你從一個字符串刪除它`長度也隨之改變(所以循環將無法正常工作,而不是使用while循環

string::iterator it = input.begin(); 

    while (it != input.end()) 
    { 
     while(it != input.end() && isdigit(*it)) 
     { 
       it = input.erase(it); 
     } 
     if (it != input.end()) 
      ++it; 
    } 
+0

是我從它= input.erase(i); ?使用'它'不會給出正確的輸出。 –

+0

opps,對不起,我忽略了它,它應該是當然迭代器。謝謝我將作出調整 –

+0

w8ht給出8t的輸出。它丟棄所有其他角色。 –

0

我建議研究如何string.erase()作品;採用一個參數的版本會在提供索引之後刪除所有內容。什麼應該解決您的問題正在改變input.erase(i)input.erase(i, 1)。帶有兩個參數的版本刪除的字符數量等於從第一個參數位置開始的第二個參數。

另外,我沒有看到你的程序這兩行的目的:

string::iterator it; 
it=input.begin()+i; 
1
cin >> inputString; 
for(string::iterator begin = inputString.begin(), end = inputString.end(); begin != end;){ 
    if(isdigit(*begin)){ 
    begin = inputString.erase(begin); 
    }else 
    ++begin; 
} 
//cout << inputString; 
相關問題