C++ で文字列から最初の文字を効率的に削除する
場合によっては、計算言語学、機械学習、データ分析などの分野で、大量のテキスト データを管理する必要があることがあります。したがって、C++ では、これには文字列とリストが一般的に使用されます。おそらく、文字列または文字のリストから最初に出現した文字を削除する必要があるでしょう。この記事では、C++ で文字列から文字の最初のインスタンスを削除する別の方法を見ていきます。この関数は文字列の内容の最初の文字を削除し、文字列が短くなります。
例 1:C++ で Erase() メソッドを使用して文字列から最初の文字を削除する
string::erase 関数は、文字列から所定の位置に文字を削除する場合に推奨される方法です。スコープのオーバーロードは、次の C++ プログラムで示されています。
プログラムのメイン関数から始めましょう。メイン関数の括弧内で、文字列変数を「StrValue」として表す標準クラス テンプレートを定義しました。文字列変数「StrValue」は単語の文字列で初期化されます。初期化時に文字列を出力する標準の cout ステートメントがあります。次に、この文字列「StrValue」に対して消去メソッドを実行しました。
Erase メソッド内では、引数として 0 と 1 を渡しています。値「0」は文字列「StrValue」の最初の文字のインデックスで、値「1」は文字列に配置される最初の文字です。指定された位置の後、erase メソッドは指定された長さの文字を文字列から削除します。最後に、最初の文字を削除した後に文字列を出力する print ステートメントが完成します。
#include
#include <文字列>
int main()
{
std::string StrValue ="ハッピーミー";
std::cout <<"前の文字列:" <
StrValue.erase(0, 1);
std::cout <<"後の文字列:" <
0を返します。
次の出力は、指定された文字列に対する消去メソッドの動作を示しています。ご覧のとおり、文字列の最初の文字が消去されています。
Erase() メソッドのもう 1 つのオーバーロードされた代替手段は、反復子を消去します。イテレータをパラメータとして受け取り、それによって指定された文字を消去します。文字列の最初の文字を指す反復子をバイパスすることで、文字列の最初の文字を消去できます。
次のプログラムの main 関数で消去メソッドを使用しました。文字列の標準形式は main 関数で定義されています。文字列変数は「StringIs」として作成され、文字列で初期化されます。まず、消去反復子メソッドを適用する前に文字列を出力しました。
次に、前の文字列の消去メソッドを呼び出しました。 Erase メソッドには、「StrValue」文字列の開始イテレータがあり、文字列の最初の文字を指すイテレータを返すために使用されます。最初の文字が返されると、erase メソッドは文字列からその文字を削除します。その後、最初の文字が削除された文字列が出力されます。
#include
int main()
std::string StringIs ="プログラミング例";
std::cout <<"前の文字列:" <
StringIs.erase(StringIs.begin());
std::cout <<"後の文字列:" <
0を返します。
シェルは出力を表示しました。これには、イテレータ消去メソッドの前と文字列から最初の文字が削除された後の文字列が表示されます。
string::erase 関数を使用する前に、空の文字列が存在しないことを確認してください。入力シーケンスが空の場合、プログラムは std::length エラー例外をスローします。
プログラムには、文字列変数「MyStr」が宣言されている main 関数が含まれています。文字列は、宣言時に文字列文字でも初期化されます。文字列値がシェルに出力されます。その後、条件が指定された文字列に適用される if ステートメントがあります。
if 条件内で empty メソッドを呼び出して、文字列が空でないことを確認しました。次に、文字列に対して消去イテレータ メソッドが使用され、指定された文字列から最初の文字が削除されます。文字列は、文字列から最初の文字が削除された状態でシェル画面に表示されます。
#include
int main()
std::string MyStr ="虹";
std::cout <<"前の文字列:" <
if (!MyStr.empty()) {
MyStr.erase(MyStr.begin());
}
std::cout <<"String Now:" <
0を返します。
次の出力文字列が得られました。
ここで、次の構文を使用して、特定の文字に対応する場合に最初の文字を削除する例を示します。
文字列変数は文字列値で初期化され、次のプログラムのメインで「Name」という名前が割り当てられます。 coutコマンドで文字列を表示しました。次に、char データ型で別の変数「ch」を定義しました。 char 変数「ch」には、前の文字列の最初の文字と一致する文字「k」が割り当てられます。
次に、if ステートメントを使用して、文字値「k」が文字列の最初の文字値と一致する条件をチェックします。文字列参照の最初の文字を取得するために使用される、front() 関数があります。文字列の最初の文字は、消去イテレータを使用して削除されます。
#include
int main()
char ch ='K';
if (Name.front() ==ch) {
Name.erase(Name.begin());
std::cout <<"今すぐ名前を付けます:" <<名前 <
0を返します。
ご覧のとおり、文字列から削除された最初の文字は次のとおりです。
文字列は、適切な string::erase メソッドを使用して変更されます。 string::substr 関数を使用すると、最後の文字を除いた文字列の複製を取得できます。
if 条件ブロック内の文字列「MyString」に対して substr 関数を使用しました。 substr 関数は、最初の文字の位置と文字列の長さを -1 にして渡しました。呼び出し側文字列オブジェクトから、指定された文字を含む新しく形成された文字列を返します。
#include
int main()
std::cout <<"元の文字列:"<
std::string n;
if (!MyString.empty()) {
n =MyString.substr(1, MyString.size() - 1);
std::cout <<"変更された文字列:" <
0を返します。
次のシェルに示すように、substr メソッドは文字列から最初に出現した文字を削除しました。
C++ では、文字列から最初の文字を削除するための代替方法を学びました。これらのメソッドは同じ出力を返しますが、C++ プログラムでは実装方法が異なります。これらは、文字列から文字の最初のインスタンスを削除するための効率的な C++ メソッドです。これらの方法がお役に立てば幸いです。
}
例 2:C++ の Iterator メソッドを使用して文字列から最初の文字を削除する
#include <文字列>
{
}
例 3:C++ で空の文字列をチェックして文字列から最初の文字を削除する
#include <文字列>
{
}
例 4:C++ で一致する文字を持つ最初の文字を削除する
#include <文字列>
{
std::string 名前 ="カルサム";
std::cout <<"前の名前:" <<名前 <
}
}
例 5:C++ で substr() メソッドを使用して文字列から最初の文字を削除する
#include <文字列>
{
std::string MyString ="持ち込み";
}
}
結論
-
C++のバイナリツリーのノードのポストオーダーサクセサ
この問題では、二分木とノードが与えられます。私たちのタスクは、ノードのポストオーダーサクセサをバイナリツリーに出力することです。 バイナリ ツリー は、各ノードが最大2つの子ノードを持つことができる特殊なタイプのツリーです。 ポストオーダートラバーサル はツリートラバーサル手法であり、最初の左のサブツリーが右のサブツリーよりもトラバースされ、ルートが最後にトラバースされます。 上記のツリーのポストオーダートラバーサル: 8 4 2 7 9 6 問題を理解するために例を見てみましょう。 入力 −上記の例の二分木、node =7 出力 − 9 説明 −二分木のポストオーダ
-
C++プログラムの動的計画法を使用して2つが隣接しないようなバイナリツリーのノードの最大合計
この問題では、各ノードに値を持つバイナリツリーが与えられます。私たちのタスクは、2つが隣接しないようにバイナリツリー内のノードの最大合計を見つけるプログラムを作成することです。動的計画法を使用します。 問題の説明 −ノードが直接接続されないように合計が最大になるように、バイナリツリーのサブセットを選択します。 問題を理解するために例を見てみましょう 入力 出力 24 説明 Elements to be taken under consideration are: 8 + 5 + 9 + 2 = 24 ソリューションアプローチ この問題の解決策は、マップを使用して、ノードがmaxS