轻松翻转句子中的每个单词

例:

string str = "I am going to reverse myself."; string strrev = "I ma gniog ot esrever .flesym"; //An easy way to achieve this 

因为我认为我必须遍历每个单词然后每个单词的每个字母。

我做的很好。 但我需要轻松/简短的方式。

C#代码:

  string str = "I am going to reverse myself."; string strrev = ""; foreach (var word in str.Split(' ')) { string temp = ""; foreach (var ch in word.ToCharArray()) { temp = ch + temp; } strrev = strrev + temp + ""; } Console.WriteLine(strrev); //I ma gniog ot esrever .flesym 

那么,这是一个LINQ解决方案:

 var reversedWords = string.Join(" ", str.Split(' ') .Select(x => new String(x.Reverse().ToArray()))); 

如果您使用的是.NET 3.5,则还需要将反转序列转换为数组:

 var reversedWords = string.Join(" ", str.Split(' ') .Select(x => new String(x.Reverse().ToArray())) .ToArray()); 

换一种说法:

  • 在空格上分开
  • 对于每个单词,通过将输入视为一个字符序列,反转该序列,将结果转换为数组,然后调用string(char[])构造函数来创建一个新单词
  • 根据框架版本,在字符串序列上调用ToArray() ,因为.NET 4有更多可用的重载
  • 调用string.Join对结果将反转的单词重新组合在一起。

请注意,这种反转字符串的方式有点麻烦。 创建扩展方法很容易:

 // Don't just call it Reverse as otherwise it conflicts with the LINQ version. public static string ReverseText(this string text) { char[] chars = text.ToCharArray(); Array.Reverse(chars); return new string(chars); } 

请注意,这在各种方面仍然是“错误的” – 它不能处理组合字符,代理对等。它只是反转原始字符串中的UTF-16代码单元序列。 适合玩游戏,但你需要理解为什么将它用于真实数据并不是一个好主意。

要反转我使用的字符串:

 new String( word.Reverse().ToArray() ) 

Reverse()函数是LINQ的一部分,因为String实现了IEnumerable 。 它的结果是另一个IEnumerable ,它现在需要转换为字符串。 你可以通过调用ToArray()来实现,它给出了char[]然后将它传递给string的构造函数。

所以完整的代码变成:

 string s="AB CD"; string reversed = String.Join(" ", s.Split(' ') .Select(word => new String( word.Reverse().ToArray() ) )); 

请注意,此代码不适用于某些unicodefunction。 它至少有两个问题:

  1. 当UTF-16编码时,基本平面外的Unicode字符需要两个char 。 反转它们会破坏编码。 这相对容易修复,因为只有有限数量的字符启动这样的序列(如果我没记错的话,则为16),这很可能在将来的unicode版本中不会扩展。
  2. 绑定字符序列。 例如,可以通过编写基本字符和背后的绑定重音来创建重音字符。 这个问题很难解决,因为可以在将来的unicode版本中添加新的组合字符。

你可以使用linq作为

 String newStr = new String( str.Reverse.ToArray() ); 

1 – 反转字符串的扩展方法

  public static string reverseString(this string description) { char[] array = description.ToCharArray().Reverse().ToArray(); return new string(array); } 

2 – 反转数组并反转此数组的所有字符串

  public static string reverseText(this string description) { string [] reversetext= description.Split(' ').Select(i => i.ToString().reverseString()).Reverse().ToArray(); return string.Join(" ", reversetext); } 

我在这里使用XOR进行交换http://en.wikipedia.org/wiki/XOR_swap_algorithm

 X := X XOR Y Y := X XOR Y X := X XOR Y 

C#是:

 public string ReverseWords(string str) { StringBuilder strrev = new StringBuilder(); StringBuilder reversedword = new StringBuilder(); foreach (var word in str.Split(' ')) { char[] singlesentence = word.ToCharArray(); int j = singlesentence.Length / 2; if (j > 0) { for (int i = singlesentence.Length - 1, c = 0; i == j; c = c + 1, i = i - 1) { singlesentence[c] = (char)(singlesentence[c] ^ singlesentence[i]); singlesentence[i] = (char)(singlesentence[c] ^ singlesentence[i]); singlesentence[c] = (char)(singlesentence[c] ^ singlesentence[i]); } } strrev.Append(singlesentence); strrev.Append(" "); } return strrev.ToString(); } 
 //Without Extension Methods Like: Split, ToCharArray, etc.. public string ReverseString(string str="Hai How Are You?"){ var FullRev="", var wordRev=""; for(i=0;i<=str.length;i++){ if(str[i]==" " || i==str.length){ FullRev=FullRev+" "+wordRev; //FullRev=wordRev+" "+FullRev; wordRev=""; }else{ wordRev=str[i]+wordRev; } } return FullRev; } //Result "iaH woH erA ?uoY"