1

string[] myString = {"a","b","c","d"}
//Reverse string algorithm here
myString = {"d","c","b","a"}
同じ文字列配列の要素を逆にするために、一時変数や .NET クラス、文字列メソッドなどの助けを借りずにそうするようインタビューで求められました。ループなどの基本的なプログラミング構造を使用するように言われました。今日は別の面接があるので、これに対する解決策を見つけることができなかったので、これが実際に可能かどうかを知りたいと急いでいます.

4

14 に答える 14

6

どうぞ、サポート変数も.net関数もありません:)しかし、配列内のすべての文字列の長さが1であると仮定します(投稿したコードのように)。

string[] myString = {"a","b","c","d", "e"};
for(int i = 0; i < myString.Length/2; i++)
{
   myString[i] += myString[myString.Length -1 -i];
   myString[myString.Length -1 -i] = ""+myString[i][0];
   myString[i] = "" + myString[i][1];
}
于 2013-09-06T09:29:47.713 に答える
2

一時変数を使用できないため、最初に文字列を追加してから、追加された部分を再度削除することを考えることができます。

// append last strings to first strings
for(int i = 0; i < myString.Length / 2; i++)
{
    myString[i] = myString[i] + myString[myString.Length - i - 1];
}

// copy first half to last half
for(int i = myString.Length / 2 + 1; i < myString.Length; i++)
{
    myString[i] = myString[myString.Length - i - 1]
                      .SubString(0, 
                              myString[myString.Length - i - 1].Length 
                               - myString[i].Length);
}

// remove useless part from first half
for(int i = 0; i < myString.Length / 2; i++)
{
    myString[i] = myString[i].SubString(
                                  myString[myString.Length - i - 1].Length 
                                   - myString[i].Length);
}

愚かなアプローチ?はい。ただし、追加の変数は関係ありません。

于 2013-09-06T09:28:29.843 に答える
1

申し訳ありませんが、間違った回答を投稿しました...これが検証済みのものです:

     int k = len - 1;
    for(int i = 0; i<len/2; i++)
    {
        myString[i] = myString[i]+"."+myString[k--];
    }
    for(int i = len/2; i<len; i++)
    {
        myString[i] = myString[k].substring(0, 1);
        myString[k] = myString[k--].substring(2,3);
    }

ただし、これは疑似コードと考えてください... .NET 構文をチェックしていません。

于 2013-09-06T09:27:13.040 に答える
0

配列の最大文字列長が 10 未満の場合は、これが役立つ可能性があります....

string[] myString = { "aaaa", "bbb", "ccccccc", "dddddd", "e", "fffffffff" };
for (int i = 0; i < myString.Length; i++)
{
    myString[i] = myString[i].Length.ToString() + myString[i]; 
}
for (int i = 0; i < myString.Length/2; i++)
{
    myString[i] = myString[i] + myString[myString.Length-1-i];
    myString[myString.Length - 1 - i] = myString[i];
}
for (int i = 0; i < myString.Length/2; i++)
{
     myString[i] = myString[i].Substring(int.Parse(myString[i][0].ToString())+2,int.Parse(myString[i][int.Parse(myString[i][0].ToString())+1].ToString()));                       
}
for (int i = myString.Length / 2; i < myString.Length; i++)
{
     myString[i] = myString[i].Substring(1, int.Parse(myString[i][0].ToString()));
}
于 2013-09-06T11:13:14.003 に答える
0

これを試しましたか

        string[] myString = { "a", "b", "c", "d","e","f" };

        int _firstcounter = 0;
        int _lastcounter = myString.Length-1;

        while (_firstcounter<=_lastcounter)
        {
            myString[_firstcounter] += myString[_lastcounter];
            myString[_lastcounter] = "" + myString[_firstcounter][0];
            myString[_firstcounter] = "" + myString[_firstcounter][1];

            _firstcounter++;
            _lastcounter--;
        }
于 2013-09-06T09:23:48.700 に答える
-1

はい、できます-

string[] myString = { "a", "b", "c", "d" };
myString  = (from a in myString orderby a descending select a).ToArray();
于 2013-09-06T09:25:22.360 に答える
-1

値を交換するには、少なくとも 1 つの変数が必要です。

擬似コード:

for(i : 0..n/2) {  
    // swap s[i] and s[n-i]
    String tmp = s[i];
    s[i] = s[n-i];
    s[n-i] = tmp;
}
于 2013-09-06T09:25:22.517 に答える
-2

使用できます Array.Reverse(UrArray);

于 2014-01-10T05:18:16.283 に答える