字符串替换问题

时间:2017-04-06 19:44:48

标签: c++ string

我有以下代码,应该用“*”替换数字,用“?”代替字母,但由于某种原因,它部分有效。你能帮我弄清问题是什么吗?

#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;
}

2 个答案:

答案 0 :(得分:1)

i行中的第二个niz.replace(i, i, "*");应为1。您的代码将用*********(9 *)替换第9个字符。如果子字符串小于第二个参数,replace将复制子字符串,直到替换尽可能多的字符

如果您只是替换字符串中的一个字符,请使用:

niz[i]='*';

注意字符周围的单引号(')。

答案 1 :(得分:0)

您正在使用std::string::replace th 形式:

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

正在替换位置count中的i(= pos)字符(此处还是i)。
请注意,带有双引号的"*"是一个字符串,而不是单个字符。

你只需要做

niz[i] = '*';

单引号。