轻松翻转句子中的每个单词
例:
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。 它至少有两个问题:
- 当UTF-16编码时,基本平面外的Unicode字符需要两个
char
。 反转它们会破坏编码。 这相对容易修复,因为只有有限数量的字符启动这样的序列(如果我没记错的话,则为16),这很可能在将来的unicode版本中不会扩展。 - 绑定字符序列。 例如,可以通过编写基本字符和背后的绑定重音来创建重音字符。 这个问题很难解决,因为可以在将来的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"