反转字符串函数反转 "ABC" (returns CBA) 但不反转 "012", returns "012"

Revese string function reverses "ABC" (returns CBA) but not "012", returns "012"

我写的一个程序,需要用递归来反转一个字符串 使用我写的这个函数。

它成功地反转了字符串 "ABCDEFGHI" 和 "noob" 但在“01234567”处失败了它只是 returns “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";
}

字符串可以递归反转如下

 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);

如果 string 的字符数为偶数,您的 pal() 只会交换 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()可以保持不变。