特殊文字に影響を与えずに配列を逆にすることはできますか?特殊文字とは、 'a'から 'z'、 'A'から 'Z'に含まれない文字を意味します。私はアルゴリズムを構築するためのアイデアが足りない、私はまだそれを把握していない。特殊文字に影響を与えずに配列を逆転する
答えて
一つの簡単な解決策は簡単な解決策には次のようになります。
1)は、一時的な文字列を作成します - >例:myArr []。
2)指定された配列からアルファベットをmyArr []にコピーします。
3)標準の文字列反転アルゴリズムを使用してmyArr []を逆順にします。
4)入力文字列とmyArrを1つのループでトラバースします。アルファベット文字が入力文字列であれば、それをmyArr []の現在の文字に置き換えます。
上記の解決策にはほとんど問題がありません。余分なスペースが必要で、入力文字列を2回通過します。 1つのトラバースと余分なスペースなしで逆転できます。以下はアルゴリズムです。
1)LがRよりも小さくなっているものの '
2)L = 0、R = A-1
3)である入力文字列が '[] str' は、文字列の長さとします、次の手順を実行 A)STR [L]はアルファベット文字でない場合は、STR [R]はアルファベット文字でない場合はそうでL ++
B)を行い、
C)そうでない場合、スワップstrをr--のありません[l]およびstr [r]
ここでは、1回のパスでそれを「適切に」行うソリューションを紹介します。
bool isspecial(char c)
{
if ((c >= 'a') && (c <= 'z')) return false;
if ((c >= 'A') && (c <= 'Z')) return false;
return true;
}
void rev(char* array, int N)
{
int i = 0; // i points to the first index of the array
int j = N - 1; // j points to the last index of the array
while (i < j)
{
if (isspecial(array[i]))
{
i++;
}
else if (isspecial(array[j]))
{
j--;
}
else
{
char tmp = array[i];
array[i] = array[j];
array[j] = tmp;
i++;
j--;
}
}
}
'else'の最初の3行は、 'std :: swap(array [i]、array [j]); 'で置き換えることができます。それはあなたが2つの要素を交換しているカジュアルな一見ではるかに明確になります。 –
良い点。しかし、私はむしろ、言語プリミティブでもっとも最適なソリューションではなく、アルゴリズムにマップされたときにソリューションが拡張された学習者(*プログラミングの初心者*)を示したいと思います。私はあなたのことを聞いています。 – selbie
あなたは特殊文字の位置は同じままにすると、文字列の残りの部分は、これは動作するはずその後、逆にする場合 -
#include <iostream>
using namespace std;
void swap(char& a, char& b)
{
char temp = a;
a = b;
b = temp;
}
int main()
{
string s = "Hell$o World";
for(int i = 0, j = s.length() -1;i < s.length()/2; i++, j--) {
while((s[i] <= 'a' && s[i] >= 'Z') || s[i] >= 'z' || s[i] <= 'A') {
i++;
}
while((s[j] <= 'a' && s[j] >= 'Z') || s[j] >= 'z' || s[j] <= 'A') {
j--;
}
swap(s[i], s[j]);
}
cout << s << endl; //dlro$W olleH
return 0;
}
Console.WriteLine("enter any string");
string str = Console.ReadLine();
string[] revstr = new string[str.Length];
for (int i = 0; i < str.Length; i++)
{
int ch = Convert.ToInt16(str.ToLower()[i]);
if ((ch < 97 || ch > 122))
{
revstr[i] = str[i].ToString();
}
}
for (int k = str.Length - 1; k >= 0; k--)
{
int ch = Convert.ToInt16(str.ToLower()[k]);
if (!(ch < 97 || ch > 122))
{
for (int j = 0; j < str.Length; j++)
{
if (revstr[j] == null)
{
revstr[j] = str[k].ToString();
break;
}
}
}
}
for (int s = 0; s < revstr.Length; s++)
{
Console.Write(revstr[s]);
}
この回答はC#のように見えますか?質問はC++のタグが付いていますが。 –
- 1. 特殊文字に影響を与えずに文字列を反転させる
- 2. 他の変数に影響を与えずにルビーポップ配列
- 3. jQuery:他の人に影響を与えずに値を配列に渡す
- 4. MediaWiki - Print.cssに影響を与えずにCommon.cssを変更する
- 5. MKMapViewのパフォーマンスに影響を与えずにMKAnnotationを配置する方法
- 6. パラメータに影響を与えない小文字のURL
- 7. パフォーマンスに影響を与えずにコード行を減らす
- 8. 大文字/小文字に影響を与えずに検索語をラップします。
- 9. SEOに影響を与えずにBlogspotにカスタムドメインを追加
- 10. 内容に影響を与えずに文章を書き直す
- 11. nFastサービスに影響を与えずにサービスを再開
- 12. ASP.Net MVC3のURLに影響を与えずにエリアにリダイレクト
- 13. 割り当てられたカラーオーダーに影響を与えずにD3の配列を並べ替える方法
- 14. ストロークに影響を与えずにWPFシェイプのジオメトリスケーリング
- 15. セッションタイムアウトに影響を与えずにjQuery ajax自動更新
- 16. オペランドのオーバーロード演算子+オペランドに影響を与えずに
- 17. Outlook Gmail Webviewerに影響を与える
- 18. レイアウトに影響を与えるCSSサブメニュー
- 19. Python:私に問題を与える特殊文字(PDFminerから)
- 20. ggplot2棒グラフの凡例に影響を与えずに積み重ね順序を逆にする
- 21. フレームに影響を与えずに画像を置き換える
- 22. データベースIDに影響を与えずにメニュー項目を並べ替える
- 23. ファイル内の改行文字を実際のファイルに影響を与えずに削除する方法
- 24. 文字列に特殊文字を置き換えます。
- 25. 文字列を特殊文字用に置き換えます。
- 26. 引用符で囲まれた文字列に影響を与えずに文字列を分割する、本当に高速のJava関数ですか?
- 27. aws-sdkに影響するファイル名の特殊文字ruby gem url_forメソッド
- 28. は、背景色に影響を与え
- 29. JavaScript - インデックスに影響を与えずに配列に要素を挿入しますか?
- 30. Edgeに影響を与えずにChromeにスタイルを適用する方法
サンプル入力と出力? –
* "特殊文字には何の影響もありません"とはどういう意味ですか?それらのキャラクターは元に戻らないのですか? – selbie