Revese字符串函数反转" ABC" (返回CBA)但不是" 012",返回" 012"

时间:2015-07-16 07:54:15

标签: c#-3.0

对于我正在编写的程序,我需要使用递归来反转字符串  使用这个函数我写道。

它颠倒了字符串" ABCDEFGHI"和" noob"成功但未能在" 01234567"它只是返回" 01234567"不是" 7654321"。

有任何帮助,

bool IsPalendromic(string s,out string r)
{
    var t = pal(s, s[s.Length - 1], s[0], 0);
    r = t;
    if (t == s) return true;
    return false;
}

string pal(string s, char newfirst, char newlast, int epoch)
{
    var r = s.ToArray();
    r[0]=newfirst;
    epoch++;
    r[r.Length-1] = newlast;
    if (epoch == r.Length - 1) return new string(r);
    return pal(new string(r), r[r.Length - 1], r[0], epoch);
    return "xxx";
}

2 个答案:

答案 0 :(得分:1)

字符串可以递归反转,如下所示

 char[] reverse(char[] str1, int index, int size)
       {
           char temp;
           temp = str1[index];
           str1[index] = str1[size - index];
           str1[size - index] = temp;
           if (index == size / 2)
           {
               return str1;
           }
           return reverse(str1, index + 1, size);

       }

将方法称为

 string str="0123";
  char[] revchar= p.reverse(str.ToCharArray(), 0, str.Length - 1);

答案 1 :(得分:0)

如果pal()的字符数为偶数,则string仅交换string的第一个和最后一个字母。

"ABCGEFGH" => "HBCDEFGA"
"ABCDEFGHI" => "ABCDEFGHI"

考虑将pal()简化为:

static string pal(string s)
{
    string reverse = "";
    for (int i = s.Length - 1; i >=0; i--)
    {
        reverse += s[i];
    }
    return reverse;
}

pal()的结果将是:

"ABCDEFGHI" => "IHGFEDCBA"
"ABCDEFGH" => "HGFEDCBA"

IsPalendromic()可以保持不变。