仅在奇数位置反转单词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!).