C++で文字配列として格納されている文の単語を逆にするプログラム
各要素が単一の文字として格納されている1つの入力文字列文があるとすると、文字列を単語ごとに逆にする必要があります。
したがって、入力が["t"、 "h"、 "e"、 ""、 "m"、 "a"、 "n"、 ""、 "i"、 "s"、 ""、"のような場合n "、" l "、" c "、" e "]の場合、出力は[" n "、" l "、" c "、" e "、" "、" i "、" s "、"になります。 "、" m "、" a "、" n "、" "、" t "、" h "、" e "]
これを解決するには、次の手順に従います-
-
配列を反転します
-
j:=0
-
n:=sのサイズ
-
初期化i:=0の場合、i
-
s[i]が''と同じ場合、-
-
配列sをインデックスjからiに反転します
-
j:=i + 1
-
-
-
配列sをインデックスjからnに反転します
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: void reverseWords(vector<char>& s) { reverse(s.begin(), s.end()); int j = 0; int n = s.size(); for(int i = 0; i < n; i++){ if(s[i] == ' '){ reverse(s.begin() + j, s.begin() + i); j = i + 1; } } reverse(s.begin() + j, s.begin() + n); } }; main(){ Solution ob; vector<char> v = {'t','h','e',' ','m','a','n',' ','i','s',' ','n','i','c','e'}; ob.reverseWords(v); print_vector(v); }
入力
{'t','h','e',' ','m','a','n',' ','i','s',' ','n','i','c','e'}
出力
[n, i, c, e, , i, s, , m, a, n, , t, h, e, ]
-
配列を逆にするCプログラムを書く
配列は、共通の名前で保存される関連アイテムのグループです。 構文 配列を宣言するための構文は次のとおりです- datatype array_name [size]; 初期化 配列は宣言時に初期化することもできます- int a[5] = { 10,20,30,40,50}; Cの逆配列 スワッピング手法を使用して配列を逆にすることができます。 たとえば、「P」が4つの要素を持つ整数の配列である場合- P[0] = 1, P[1] = 2, P[2] = 3 and P[3]=4 次に、反転した後- P[0] = 4, P[1] = 3, P[2] = 2 and P[3]=1
-
C++で配列のビットノイズをチェックするプログラム
N個の整数の配列arr[N]が与えられた場合、タスクは、与えられた配列がバイトニックであるかどうかをチェックすることです。指定されたアレイがバイトニックである場合は、「はい、バイトニックアレイです」と出力します。そうでない場合は、「いいえ、バイトニックアレイではありません」と出力します。 Bitonicアレイとは、アレイが最初に厳密に昇順で、次に厳密に降順である場合です。 この配列のように、arr [] ={1、2、3、4、2、-1、-5}はバイトニック配列です。これは、4までは厳密に昇順であり、4以降は厳密に降順であるためです。 入力 arr[] = {1, 3, 5, 4,