我撰寫此代碼以使用遞回從字串中洗掉所有出現的 x
#include <bits/stdc .h>
using namespace std;
void removex(string str)
{
if (str.length()==0)
{
return;
}
if (str[0] != 'x')
{
removex(str.substr(1,str.length()));
}
int i = 1;
for (; str[i] != '\0'; i )
{
str[i-1]=str[i];
}
str[i - 1] = str[i];
removex(str);
// cout<<"strq"<<str<<endl;
}
int main()
{
int t;
cin >> t;
while (t--)
{
string str;
cin >> str;
removex(str);
cout << str << endl;
}
return 0;
}
但是它是按值傳遞的,如果我嘗試使用按參考傳遞,它會給出錯誤,因為對非 const 的參考的初始值必須是 lvalueC。這意味著我需要制作不適合其余代碼的參考常量。我嘗試通過指標傳遞并使用箭頭運算子,但是無法在索引處獲取值并且不確定如何進行遞回呼叫。傳遞地址或 ponter?有人可以相應地修改它嗎?
uj5u.com熱心網友回復:
用遞回來做這件事std::string是一個令人生畏的瘋狂模板。擦除/洗掉習語就是為了這個目的而存在的,它可以迭代地運行,而且效率很高。最重要的是,它已經存在;您所要做的就是設定呼叫。
也就是說,如果您一心想以遞回方式(并且效率低下)執行此操作,則需要以某種方式將結果傳達回呼叫者(包括遞回呼叫) 。以下使用函式回傳型別(即std::string. 這也使用了全域 freeoperator 允許連接一個char std::string來回傳一個新字串:
#include <iostream>
#include <string>
std::string removex(std::string str)
{
if (!str.empty())
{
if (str[0] == 'x')
str = removex(str.substr(1));
else
str = str[0] removex(str.substr(1));
}
return str;
}
int main()
{
std::string str = "Remove all x chars from this string.";
std::cout << "Before: " << str << '\n';
std::cout << "After: " << removex(str) << '\n';
return 0;
}
輸出
Before: Remove all x chars from this string.
After: Remove all chars from this string.
也就是說,這不是我這樣做的方式。我會使用擦除/洗掉習語,它會更快,記憶體效率更高。
uj5u.com熱心網友回復:
鑒于您使用的是 C ,我將使用標準庫的功能。我相信只需一行代碼就可以輕松解決這個問題。假設字串變數稱為 line,您只需要執行以下操作:
line.erase(remove(line.begin(), line.end(), 'x'), line.end());
下面是一個完整的例子:
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
std::string line = "12djd V x jhrf h58HSFH HUHFuhfdhkdh uhdfvygh 234 fhj xxx";
std::cout << "Line before removing the x character: " << line << std::endl;
line.erase(remove(line.begin(), line.end(), 'x'), line.end());
std::cout << "Line after removing the x character: " << line << std::endl;
return 0;
}
上面的示例將產生以下輸出:
Line before removing the x character: 12djd V x jhrf h58HSFH HUHFuhfdhkdh uhdfvygh 234 fhj xxx
Line after removing the x character: 12djd V jhrf h58HSFH HUHFuhfdhkdh uhdfvygh 234 fhj
您可以在此處運行一個示例:https ://onlinegdb.com/4wzMXTXP5
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/487131.html
上一篇:具有一個引數的遞回搜索二叉搜索樹
