仅在奇数位置反转单词C#

仅在奇数位置反转单词C#,c#,string,C#,String,这是我的密码。如何编辑它以显示奇数位置的每一个单词,然后将其反转 for (int i = input.Length - 1; i >= 0; i--) { if (input[i] == ' ') { result = tmp + " " + result; tmp = ""; } else

这是我的密码。如何编辑它以显示奇数位置的每一个单词,然后将其反转

        for (int i = input.Length - 1; i >= 0; i--)
        {
            if (input[i] == ' ')
            {
                result =  tmp + " " + result;
                tmp = "";
            }
            else
                tmp += input[i];
        }

        result = tmp + " " + result;
        Console.WriteLine(result);
输入示例:

“你今天怎么样?”

要输出:

“How年代雅多特

根据单词的位置['How'->0]不要反转;[are->1奇数索引]反转

OP:根据单词的位置['How'->0]不反转;[are->1奇数索引]反向

publicstaticvoidmain()
{
string input=“你今天好吗Laken-C”;
//正如@Dmitry Bychenko string input=“你今天怎么样”;
//(How之后的双空格)导致uoy今天的结果如何
input=Regex.Replace(输入@“\s+”,“”);
var inp=input.Split(“”).ToList();
对于(int j=0;j
输出:

演示:


您可以在LINQ的帮助下实现:

var input = "hello this is a test message";
var inputWords = input.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
var result = string.Join(" ", 
                 inputWords.Select((w, i) => 
                                         i % 2 == 0
                                         ? w 
                                         : new string(w.Reverse().ToArray())
                 ));
其中,select中的
w
是单词,而
i
是索引,第一个单词从0开始
%
是模运算符,并获取余数。如果
i%2==0
(即i可以被2除,没有余数),则返回原始值。如果有余数(奇数),则返回相反的字。最后,它被包装在一个
字符串中。Join(“,items”)
将其转换回普通字符串,而不是项目数组


到目前为止,您有一个
字符串,如下所示:

  string input = "I want to reverse all odd words (odd words only!).";
当然,你想完成这项任务。现在主要的问题是什么是奇字? 如果您指的是单词的位置(
I
0
位置,
want
1
位置应该颠倒,等等) 然后,您可以使用正则表达式匹配单词,并使用Linq进行处理:

  using System.Linq;                     // To reverse single word
  using System.Text.RegularExpressions;  // To match the words within the text

  ... 

  // Let's elaborate the test example: add
  //  1. some punctuation - ()!. - to preserve it 
  //  2. different white spaces (spaces and tabulation - \t)
  //     to add difficulties for naive algorithms
  //  3. double spaces (after "to") to mislead split based algorithms
  string input = "I want to  reverse all\todd words (odd words only!).";

  int index = 0;                                // words' indexes start from zero

  string result = Regex.Replace(
    input,
   "[A-Za-z']+",                                // word is letters and apostrophes
    match => index++ % 2 == 0 
      ? match.Value                             // Even words intact
      : string.Concat(match.Value.Reverse()));  // Odd words reversed

  Console.WriteLine(result);
如果要反转长度为奇数
的单词,即
i
all
odd
,则只需将条件更改为

    match => match.Value % 2 == 0 
结果:

  I tnaw to  esrever all    ddo words (ddo words ylno!).

请注意,标点符号已被保留(只有单词被颠倒)。

取单词,循环并仅更改奇数。您能提供一些输入示例和所需结果吗?定义奇数单词。“奇数”是基于句子中的位置,还是单个单词的长度,是数字还是完全其他的?不要期望我们能够知道你在这里的意思。如果你发布了这个问题的更新版本,请在这里的评论中为我添加标签。根据位置假设它是奇数,在它关闭之前,我正在处理一个答案。@Laken-C您的示例I/O没有多大意义,
How
的长度是奇数,
您的长度也是奇数。请试着变得更晶莹。
string input=“你今天好吗”(在
How
之后加上两个空格)导致
uoy今天怎么样
outcome@DmitryBychenko修复了
input.Split(新字符[]{''},StringSplitOptions.RemoveEmptyEntries)是双空格情况下更安全的选项appears@Dmitry没错。谢谢
  I tnaw to  esrever all    ddo words (ddo words ylno!).