C / C ++の代替母音と子音文字列?
与えられた文字列があり、母音と子音が交互の位置を占めるように文字列内の文字を再配置します。上記の方法で文字列を再配置できない場合は、「不可能」と印刷してください。
お互いの母音の順序と、お互いの子音の順序を維持する必要があります。
Input: abce Output: abec
説明
-
文字列内の母音と子音の数を見つけます。
-
いいえの違いの場合。母音と子音の数が複数ある場合は、「不可能」を返します。
-
子音よりも多くの母音が文字列に存在するという条件がある場合は、最初の母音を最初に印刷し、残りの文字列に対して繰り返します。
-
母音よりも多くの子音が文字列に存在するという条件がある場合は、最初の子音を最初に印刷し、残りの文字列に対して繰り返します。
-
いいえの場合。母音と子音の数が同じである場合は、最初の母音を最初の子音と比較し、小さい方の母音を最初に印刷します
例
#include <iostream>
using namespace std;
bool isVowel(char ch) {
if (ch == 'a' || ch == 'e' || ch == 'i' ||
ch == 'o' || ch =='u')
return true;
return false;
}
string createAltStr(string str1, string str2,
int start, int l) {
string finalStr = "";
for (int i=0, j=start; j<l; i++, j++)
finalStr = (finalStr + str1.at(i)) + str2.at(j);
return finalStr;
}
string findAltStr(string str) {
int nv = 0, nc = 0;
string vstr = "", cstr = "";
int l = str.size();
for (int i=0; i<l; i++) {
char ch = str.at(i);
if (isVowel(ch)) {
nv++;
vstr = vstr + ch;
} else {
nc++;
cstr = cstr + ch;
}
}
if (abs(nv-nc) >= 2)
return "no such string";
if (nv > nc)
return (vstr.at(0) + createAltStr(cstr, vstr, 1, nv));
if (nc > nv)
return (cstr.at(0) + createAltStr(vstr, cstr, 1, nc));
if (cstr.at(0) < vstr.at(0))
return createAltStr(cstr, vstr, 0, nv);
return createAltStr(vstr, cstr, 0, nc);
}
int main() {
string str = "abde";
cout << findAltStr(str);
return 0;
} -
C / C ++でのstrncmp()とstrcmp()の違い
strncmp() 関数strncmp()は、左の文字列と右の文字列を数値まで比較するために使用されます。 strcmp()と同じように機能します。左の文字列の一致する文字が右の文字列の文字よりも大きいASCII値を持っている場合、ゼロより大きい値を返します。左の文字列の一致する文字のASCII値が右の文字列の文字よりも小さい場合、ゼロ未満の値を返します。 C言語でのstrncmp()の構文は次のとおりです。 int strncmp ( const char *leftString, const char *rightString, size_t number ); ここで le
-
C /C++で文字列を反転します
これはC言語で文字列を逆にする例です 例 #include<stdio.h> #include<string.h> int main() { char s[50], t; int i = 0, j = 0; printf("\nEnter the string to reverse :"); gets(s); j = strlen(s) - 1; while (i < j) { &n