我有以下代码,应该用“*”替换数字,用“?”代替字母,但由于某种原因,它部分有效。你能帮我弄清问题是什么吗?
#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 :(得分: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] = '*';
单引号。