2017-04-06 105 views
-2

我有下面的代碼應該用「*」替換數字,並用「?」替換字母,但由於某些原因,它部分起作用。你能幫我弄清楚是什麼問題?字符串替換問題

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

using namespace std; 

int main(){ 

    //Declaring Variables 
    int MAX = 10; 
    string niz = ""; 

    do { 
     //Letting user insert a string 
     cout<<"Write a random set of characters (max. "<<MAX<<" signs): "; 
     getline(cin, niz); 

     //Comparing the size of string with allowed maximum 
     if (niz.size() > MAX){ 

      //Print error message 
      cout<<"String too long."<<endl; 
     } 
    } while (niz.size() > MAX); 

    //Iterating through the string, checking for numbers and letters 
    for (int i = 0; i <= niz.size(); i++){ 

     //If the sign is a digit 
     if (isdigit(niz[i])){ 

      //Replace digit with a "*" 
      niz.replace(i, i, "*"); 

      //If the sign is a letter 
     } else if (isalpha(niz[i])){ 

      //Replace vowel with "?" 
      niz.replace(i, i, "?"); 
     } 
    } 

    //Printing new string 
    cout<<"New string, after transformation, is: "<<niz<<", and its length is: "<<niz.length()<<endl; 
} 
+0

'我<= niz.size()'應該是'我 aschepler

+0

我真的用小於,但它仍然取得了相同的結果,所以我想也許它不會遍歷所有的字符。 – BloodDrunk

+0

如果您告訴我們您正在提供什麼輸入,您得到的輸出以及您期望的輸出,它會有所幫助。 –

回答

1

在線路niz.replace(i, i, "*");第二i應該是一個1。您的代碼將用*********(9 *)代替第9個字符。如果子是TAHN的第二個參數越小,replace將複製子,直到儘可能多的字符可能被替換

如果你是剛剛替換字符串使用一個字符:

niz[i]='*'; 

注單引號(')在角色周圍。

+0

謝謝,這個作品,不知道我可以直接替換這些字符。 – BloodDrunk

+0

@BloodDrunk不要忘記upvote如果答案適合你 – Ken

+0

我知道,我只是不被允許投票呢。 – BloodDrunk

0

您正在使用5 形式的:

basic_string& replace(size_type pos, size_type count, 
         const CharT* cstr); 

其被替換count(= i這裏)字符從位置pos(也= i這裏)。
請注意,帶雙引號的"*"是一個字符串,而不是單個字符。

您需要做的僅僅

niz[i] = '*'; 

單引號。