मैं निम्नलिखित की तरह एक वाक्य को उलटने की कोशिश कर रहा हूँ: इनपुट:
मेरा नाम जॉन है। मैं 23 साल का हूं।
उत्पादन:
.old वर्ष 23 पूर्वाह्न मैं .जॉन नाम my . है
मैं यह नहीं समझ सकता कि अंत में बिंदु को कैसे स्विच किया जाए। मैंने Split
का उपयोग करने की कोशिश की लेकिन यह हमेशा शब्द के अंत में बिंदु लौटाता है।
string[] words = sentence.Split(' ');
Array.Reverse(words);
return string.Join(" ", words);
4 जवाब
शब्द शुरू होने से पहले अवधि ('.') को स्थानांतरित करने के लिए अतिरिक्त तर्क जोड़ें, जैसे
var sentence ="my name is john. i am 23 years old."; //Input string
string[] words = sentence.Split(' '); //Split sentence into words
Array.Reverse(words); //Revere the array of words
//If word starts with . then start your word with period and trim end.
var result = words.Select(x => x.EndsWith('.') ? $".{x.Trim('.')}" : x);
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^This was missing
Console.WriteLine(string.Join(" ", result));
Array.Reverse
: sentence..Split(' ').Reverse().Select(x =>...)
की कोई आवश्यकता नहीं है और .Trim
के बजाय .TrimEnd
का उपयोग करें।
आप रिक्त स्थान से अलग किए गए शब्दों को उलट रहे हैं (old.
में बिंदु शब्द का हिस्सा है)। यदि आप बिंदुओं को भी उलटना चाहते हैं तो आप उन्हें शब्दों के रूप में मानना चाहते हैं (अंतरिक्ष द्वारा प्रसारित):
public static class TextExtensions
{
public static string PointTrick(this string str) => str.Replace(".", " .");
public static string PointUntrick(this string str) => str.Replace(". ", ".");
public static string ReverseWords(this string str) => string.Join(" ", str.Split(" ").Reverse());
}
वे परीक्षण पास हो जाते हैं।
[TestClass]
public class SOTests
{
private string GetReversedWithPointTrick(string input) => input.PointTrick().ReverseWords().PointUntrick();
[TestMethod]
public void ReverseWordsTest()
{
var sut = "three two. one";
var expected = "one two. three";
var result = sut.ReverseWords();
Assert.AreEqual(expected, result);
}
[TestMethod]
public void ReverseWords_PointTrick_Test()
{
var sut = "my name is john. i am 23 years old.";
var expected = ".old years 23 am i .john is name my";
var result = GetReversedWithPointTrick(sut);
Assert.AreEqual(expected, result);
}
}
आप लिंक और रेगुलर एक्सप्रेशन के संयोजन को आज़मा सकते हैं:
using System.Linq;
using System.Text.RegularExpressions;
...
string source = "my name is john. i am 23 years old.";
// .old years 23 am i .john is name my
string result = string.Join(" ", Regex
.Matches(source, @"\S+")
.Cast<Match>()
.Select(m => Regex.Replace(m.Value, @"^(.*?)(\p{P}+)$", "$2$1"))
.Reverse());
यहां हम दो पैटर्न का उपयोग करते हैं: एक साधारण "\S+"
जो किसी भी वर्ण से मेल खाता है जो रिक्त स्थान नहीं हैं। अगला पैटर्न ^(.*?)(\p{P}+)$
समझाने लायक है:
^(.*?)(\p{P}+)$
यहां
^ - anchor, start of the string
(.*?) - group #1: any symbols, but as few as possible
(\p{P}+) - group #2: one or more punctuation symbols
$ - anchor, end of the string
और मिलान होने पर हम इन समूहों को स्वैप करते हैं: "&2&1"
डेमो:
private static string Solve(string source) => string.Join(" ", Regex
.Matches(source, @"\S+")
.Cast<Match>()
.Select(m => Regex.Replace(m.Value, @"^(.*?)(\p{P}+)$", "$2$1"))
.Reverse());
...
string[] tests = new string[] {
"my name is john. i am 23 years old.",
"It's me, here am I!",
"Test...",
};
string report = string.Join(Environment.NewLine, tests
.Select(test => $"{test,-35} => {Solve(test)}"));
Console.Write(report);
परिणाम:
my name is john. i am 23 years old. => .old years 23 am i .john is name my
It's me, here am I! => !I am here ,me It's
Test... => ...Test
क्योंकि किसी को हमेशा इन चीजों का LINQ संस्करण पोस्ट करना होता है
sentence.Split().Reverse.Select(w => w[^1] == '.' ? ('.' + w[..^1]) : w);
बिना किसी तर्क के स्प्लिट व्हॉट्सएप पर बंट जाता है, रिवर्स एक LINQ चीज है जो इनपुट को उलट देती है और फिर हमारे पास बस थोड़ा सा तर्क होता है जो पूछता है कि क्या अंतिम (^ 1 इंडेक्स और सी # 9 की रेंज फीचर से है, जिसका अर्थ है "इनमें से एक end") चार एक बिंदु है, इसे प्रारंभ में ले जाएं (एक बिंदु को जोड़ दें और अंत से 1 तक की सभी स्ट्रिंग) अन्यथा केवल शब्द को आउटपुट करें ..
और जो कुछ बचा है, वह है स्ट्रिंग से जुड़ना, जो आप जानते हैं कि कैसे करना है: string.Join(" ", ...)
संबंधित सवाल
नए सवाल
c#
C # (उच्चारण "तेज देखें") Microsoft द्वारा विकसित एक उच्च स्तरीय, सांख्यिकीय रूप से टाइप किया हुआ, बहु-प्रतिमान प्रोग्रामिंग भाषा है। C # कोड आमतौर पर Microsoft के .NET परिवार के टूल और रन-टाइम को लक्षित करता है, जिसमें .NET फ्रेमवर्क, .NET कोर और Xamarin अन्य शामिल हैं। C # या C # के औपचारिक विनिर्देश में लिखे गए कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें।