C#:颠倒句子中的单词

C#:颠倒句子中的单词,c#,C#,下面的代码如果一个句子中的倒装词,句子中的单词顺序将是相同的,但单词将被倒装 使用系统; 使用系统文本; 名称空间反向\u字符串 { 班级计划 { 静态void Main(字符串[]参数) { 编写(“输入字符串:”); 字符串S=Console.ReadLine(); 字符串[]sep=S.Split(“”); StringBuilder Wrev=new StringBuilder();//单词反转 StringBuilder Srev=new StringBuilder();//句子颠倒

下面的代码如果一个句子中的倒装词,句子中的单词顺序将是相同的,但单词将被倒装

使用系统;
使用系统文本;
名称空间反向\u字符串
{
班级计划
{
静态void Main(字符串[]参数)
{
编写(“输入字符串:”);
字符串S=Console.ReadLine();
字符串[]sep=S.Split(“”);
StringBuilder Wrev=new StringBuilder();//单词反转
StringBuilder Srev=new StringBuilder();//句子颠倒
对于(int j=0;j=0;i--)
{
附录(9月[j][i]);
}
Srev.Append(Wrev);
Wrev.Clear();
Wrev.追加(“”);
}
控制台写入线(Srev);
}
}
}

对于简单文本,您只需使用

输出

Enter a string: asd sdf dfg fgh
dsa fds gfd hgf
对于复杂的Unicode,您需要更精确地对字符进行分组。但是,您可以利用
GetTextElementEnumerator

返回一个枚举数,该枚举数遍历 绳子

给定的

public static IEnumerable<string> ToElements(this string source)
{
   var enumerator = StringInfo.GetTextElementEnumerator(source);
   while (enumerator.MoveNext())
      yield return enumerator.GetTextElement();
}
让我们从定义开始;假设

单词是由字母和撇号组成的非空序列

我们可以借助正则表达式(以及少量Linq-
Reverse()
)实现一个简单的解决方案:我们所要做的就是用它的
Reverse
d表示替换每个单词

代码:

  using System.Linq;
  using System.Text.RegularExpressions;

  ...

  private static string WordReverse(string value) => 
    Regex.Replace(value ?? "", @"[\p{L}_]+", m => string.Concat(m.Value.Reverse()));
  string[] tests = new string[] {
    "Text (на русском)",
    "Simple test.",
    "Another \"text\": punctuation!"
  };
 
  Console.Write(string.Join(Environment.NewLine, tests
    .Select(test => $"{test,-30} => {WordReverse(test)}")));
Text (на русском)              => txeT (ан мокссур)
Simple test.                   => elpmiS tset.
Another "text": punctuation!   => rehtonA "txet": noitautcnup!
演示:

  using System.Linq;
  using System.Text.RegularExpressions;

  ...

  private static string WordReverse(string value) => 
    Regex.Replace(value ?? "", @"[\p{L}_]+", m => string.Concat(m.Value.Reverse()));
  string[] tests = new string[] {
    "Text (на русском)",
    "Simple test.",
    "Another \"text\": punctuation!"
  };
 
  Console.Write(string.Join(Environment.NewLine, tests
    .Select(test => $"{test,-30} => {WordReverse(test)}")));
Text (на русском)              => txeT (ан мокссур)
Simple test.                   => elpmiS tset.
Another "text": punctuation!   => rehtonA "txet": noitautcnup!
结果:

  using System.Linq;
  using System.Text.RegularExpressions;

  ...

  private static string WordReverse(string value) => 
    Regex.Replace(value ?? "", @"[\p{L}_]+", m => string.Concat(m.Value.Reverse()));
  string[] tests = new string[] {
    "Text (на русском)",
    "Simple test.",
    "Another \"text\": punctuation!"
  };
 
  Console.Write(string.Join(Environment.NewLine, tests
    .Select(test => $"{test,-30} => {WordReverse(test)}")));
Text (на русском)              => txeT (ан мокссур)
Simple test.                   => elpmiS tset.
Another "text": punctuation!   => rehtonA "txet": noitautcnup!

如果你有Unicode字符,考虑这个回答你的问题吗?然后有人提到汉语是没有空格的,这使得单词和字符的概念变得毫无意义。。。