如何完全反转C样式字符串

时间:2011-04-15 06:31:49

标签: c algorithm string pointers

我想完全反转C样式字符串(以null结尾),即包含空字符。

null字符应该是反向字符串中的第一个元素。

7 个答案:

答案 0 :(得分:14)

这实际上非常简单:

char *reversed = "";

:)

'\0'开头的C字符串是空字符串。除非你用指针做事(比如加+1)或使用期望内存(指针+大小)而不是字符串的函数,'\0'

背后的内容并不重要

如果您确实需要在'\0'之后存在于内存中的实际字符串:执行将反向字符串写入给定内存位置(void strreverse(char *dest, const char *string))的函数。 然后像这样称呼它:char dest[ENOUGH_SPACE]; dest[0] = '\0'; strreverse(dest + 1, YOUR_STRING);

答案 1 :(得分:2)

反转一个字符串实际上是一个很好的任务给初学者,如果你没有做任何编程,它会要求你坐下来用一张纸坐下来考虑如何存储字符以及如何交换它们周围。此外,它需要您在停止时要小心,以便它对具有偶数和奇数字符的字符串都有效。

因此,你为什么不亲自尝试一下?

但是,我并没有真正看到反向包含null终止符的重点,它只会使字符串在与标准字符串函数一起使用时看起来是空的。另外,我希望这不是一个小端/大端混合,因为endianess不适用于字符串。

答案 2 :(得分:2)

void memcpy_reverse (char* dest, const char* source, size_t n)
{
  size_t i;

  for(i=0; i<n; i++)
  {
    dest[i] = source[n-i-1];
  }
}

答案 3 :(得分:0)

这是另一种方式。我们取一个指针,使其指向目标。然后将“x”放在指针指向的位置。反转你的字符串然后用目标连接它。现在指定'\ 0'到指针指向的位置。

WCHAR * wszStr = "Hello World";
wcscpy_s(wszTarget,256,L"x");
WCHAR *pTempNULL = wszTarget;
wcscat_s(wszTarget,256,wcsrev(wszStr)/*Or Reverse you string with your algorithm*/);
*pTempNULL = '\0';

答案 4 :(得分:0)

拿弦。将其存储在char []数组中。使用2个索引遍历字符并交换它们。将其反转回String。

我想我们可以在Java中使用类似的东西来实现它:

public class ReverseString 
{
    public static void main(String[] args) 
    {
        String str = "a ";
        char[] myChar = str.toCharArray();
        System.out.println(str);
        int p1 = 0;
        int p2 = myChar.length -1;

        while(p1<p2)
        {
            char temp = myChar[p1];
            myChar[p1]= myChar[p2];
            myChar[p2] = temp;

            p1++;
            p2--;
        }

        str = str.copyValueOf(myChar);

        System.out.println(str);
    }
}

答案 5 :(得分:0)

android:clickable="true"

答案 6 :(得分:0)

检查此C#代码。您可以在行动here

中看到此代码
public static string ReverseCString(string input)
{

    char[] charArray = input.ToCharArray();
    Array.Reverse(charArray);
    return new string (charArray);
}