C++で英語アルファベットと同じ距離にある文字ペアの数を数える方法
文字列が与えられ、その中から「英語アルファベット上での文字同士の距離」と「文字列内での位置の距離」が一致する文字ペアの数を計算するのが本記事の課題です。
例で理解しよう
入力 − string str = "Tutorials Point"
出力 − 英語アルファベットと同じ距離にある文字ペアの数: 5
説明 − アルファベット上で同じ距離関係にある文字ペアは、(u, t)、(u, r)、(t, r)、(i, o)、(s, n) の5つです。したがって合計は5ペアとなります。
入力 − string str = "Learning is the best habit"
出力 − 英語アルファベットと同じ距離にある文字ペアの数: 12
説明 − 該当する文字ペアは、(r, i)、(r, h)、(n, i)、(n, b)、(i, g)、(n, t)、(g, i)、(i, b)、(s, h)、(h, t)、(s, t)、(a, b) の12個です。
プログラムで使用するアプローチ
文字列を入力として受け取り、処理用の関数に渡します
形成できるペアの総数を格納するための一時変数 count を用意します
length() 関数を使用して文字列の長さを取得します
i を 0 から文字列の長さまで FOR ループで回します
ループ内で、j を i+1 から文字列の長さまで回す内側の FOR ループを開始します
ループ内で temp に abs(str[i] - str[j]) を代入します
temp == abs(i - j) が成立するかを判定し、成立していれば count を1増やします
count を返します
結果を出力します
コード例
#include <bits/stdc++.h>
using namespace std;
int pairs_distance(string str){
int count = 0;
int len = str.length();
for (int i = 0; i < len; i++){
for (int j = i + 1; j < len; j++){
int temp = abs(str[i] - str[j]);
if (temp == abs(i - j)){
count++;
}
}
}
return count;
}
int main(){
string str = "Tutorials Point";
cout<<"Count of character pairs at same distance as in English alphabets are: "<<pairs_distance(str);
return 0;
}出力
上記のコードを実行すると、次のような出力が得られます −
Count of character pairs at same distance as in English alphabets are: 5
-
C++で左右の隣接文字が同じである文字をカウントする方法
文字列(例えば str)が与えられ、その中から「左側と右側の隣接文字が同じである文字」の数を求めるのが課題です。なお、文字列の先頭と末尾の文字は隣接文字を1つしか持たないため、常にカウント対象に含めます。具体例入力 − string str = poiot 出力 − カウントは 3説明 − この文字列では、先頭の「p」、末尾の「t」、そして左右の隣接文字がどちらも「o」である「i」が条件を満たすため、カウントは3になります。入力 − string str = nitihig 出力 − カウントは 4説明 − この文字列では、「n」「t」「h」「g」が条件を満たすため、カウントは4になります。ア
-
C++で英字アルファベットと同じ位置にある文字を数える方法
大文字と小文字の両方を含む任意の長さの文字列が与えられたとき、その中から「英字アルファベットにおける位置」と「文字列内での位置」が一致している文字の個数を求めるのが本記事の課題です。例入力 − 文字列 str = eBGD 出力 − カウントは 2説明 − B と D は、英字アルファベットと同じ順序で並んでいる文字です。B は2番目、D は4番目に位置しているため、該当するのはこの2文字になります。入力 − 文字列 str = Abcdeizxy 出力 − カウントは 5説明 − A、B、C、D、E の5文字が英字アルファベットと同じ順序で並んでいます。A が1番目、続いて B、C、D、E