![](/img/trans.png)
[英]function which takes a string as input and returns the most frequent character
[英]Implement a function which takes a string as an input and returns a new one without consonant letters replaced with “!”
UPD:我重寫了 function,添加了一個額外的數組來寫入新變量。 但是很可惜,function 現在不工作,文字也不清楚。 而且我不明白出了什么問題我的代碼:
bool IsConsonant(char ch)
{
const char* consonant = "bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ";
for (size_t c = 0; consonant[c] != '\0'; ++c)
if (ch == consonant[c])
return true;
return false;
}
char* ReplaceConsonant(char* str)
{
size_t size = strlen(str);
char* ch = new char[size + 1];
for (size_t index = 0; str[index] != '\0'; ++index)
{
str[index] = ch[index];
if (IsConsonant(ch[index]))
ch[index] = '!';
}
return ch;
delete[] ch;
}
int main()
{
const char* ch = "I like this";
const char* rez = ReplacedConsonant(ch);
std::cout << rez;
}
長話短說,ReplacedConsonant(char* str) 的參數 str 的類型是 char*,它是指向 char 的指針,並且您嘗試將變量 ch 作為參數傳遞,而 ch 的類型是 const char*,它是指向 const char 的指針。 因此,您基本上是在嘗試將 const 轉換為非 const var,這是編譯時錯誤。 無論如何,更改字符串文字是未定義的行為,因為字符串文字很可能放置在 memory 的只讀部分中,我認為修改只讀部分是無稽之談。
這應該工作
int main() {
char ch[] = "I like this";
const char* rez = ReplacedConsonant(ch);
std::cout << rez;
return 0;
}
您當前嘗試修改常量字符串,將調用代碼更改為:
int main()
{
char ch[] = "I like this";
const char* rez = ReplacedConsonant(ch);
std::cout << rez;
}
function 參數的聲明(沒有限定符const
)
char* ReplacedConsonant(char* str);
表示傳遞給 function 的字符串將被更改。
因此,您可能不會將常量字符串傳遞給 function。
因此,在 main 中聲明一個非常量數組而不是指向字符串文字的指針。 例如
int main()
{
char ch[] = "I like this";
std::cout << ReplacedConsonant(ch) << '\n';
}
此外,通常最好通過以下方式聲明 function
char * ReplacedConsonant( char *str, char c = '!' );
在這種情況下,您可以將輔音字母替換為任何字符。 function正文內寫
if ( IsConsonant( str[index] ) ) str[index] = c;
const char *ch;
聲明一個不可變的 c 樣式字符串。 您不能將其傳遞給將char*
(可修改字符串)作為參數的 function。 由於這個問題被標記為 c++,我建議你使用std::string
和其他一些 c++ 函數來讓你的生活更輕松。
std::string ReplacedConsonant(std::string str)
{
std::replace_if(str.begin(), str.end(), IsConsonant, '!');
return str;
}
int main()
{
std::string ch = "I like this";
std::string res = ReplacedConsonant(ch);
std::cout << res;
}
這也滿足了您的問題的標題,即此 function 返回一個新字符串而不是修改現有字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.