मुझे मदद की ज़रूरत है मेरे पास प्रोग्राम बनाने के लिए सी # में कार्य है जो उपयोगकर्ता इनपुट (स्ट्रिंग) लेता है। आपको विभिन्न जानवरों द्वारा किए गए शोर दिए जाते हैं जिन्हें आप अंधेरे में सुन सकते हैं, यह निर्धारित करने के लिए प्रत्येक शोर का मूल्यांकन करें कि यह किस जानवर से संबंधित है। शेर कहते हैं 'ग्र्र', बाघ कहते हैं 'रॉ', सांप कहते हैं 'एसएसएसएस', और पक्षी 'चिरप' कहते हैं।

इनपुट प्रारूप: एक स्ट्रिंग जो उन शोरों का प्रतिनिधित्व करती है जिन्हें आप उनके बीच की जगह के साथ सुनते हैं।

आउटपुट स्वरूप: एक स्ट्रिंग जिसमें प्रत्येक जानवर शामिल होता है जिसे आप प्रत्येक के बाद एक स्थान के साथ सुनते हैं। (जानवर दोहरा सकते हैं)

मैं इसे बनाता हूँ

    using System;
    using System.Reflection.Metadata;
    using System.Runtime.CompilerServices;
    using System.Security.Cryptography.X509Certificates;
    using System.Text;
    using System.Text.RegularExpressions;
    
    namespace nekaVjezba
    {
        class Program
        {
            static void Main(string[] args)
            {
    
    
                var text = Console.ReadLine();
    
                var matches = Regex.Matches(text, @"\w+[^\s]*\w+|\w");
               
    
    
                foreach (Match match in matches)
                {
                    var word = match.Value;
    
    
                     if (word == "Grr")
                          {
                        Console.WriteLine("Lion");
    
    
                    }
                          else if (word == "Rawr")
                          {
                        Console.WriteLine("Tiger");
    
                    }
                          else if (word == "Ssss")
                          {
                              Console.WriteLine("Snake");
                          }
                          else if (word == "Chirp")
                          {
                              Console.WriteLine("Bird");
                          }
                }
            }
        }
    }

वह काम है लेकिन मेरा आउटपुट है

  • सिंह
  • सिंह
  • बाघ
  • साँप

लेकिन यह एक लाइन में होना चाहिए शेर शेर बाघ सांप

-1
jvzznjs 2 नवम्बर 2020, 00:36

4 जवाब

सबसे बढ़िया उत्तर

हालांकि ऐसा करने के कई तरीके हैं। हालांकि, यहां Dictionary और LINQ का उपयोग करके एक संक्षिप्त समाधान (ô̖p̖̝̃̉en̺͔͍͌̍̈́ y̯͇̦͌̍͌oũ̠͍̫̀͡r̜̚ m̠̞͑̍i̭̓ṇ̼̍͘d͈̪͍̑̚͝) दिया गया है।

चूंकि शब्दों को एक स्थान से अलग किया जाता है, तो एक साधारण string.Split ठीक काम करेगा।

var dict = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase)
{
   {"Grr", "Lion"},
   {"Rawr", "Tiger"},
   {"Ssss", "Snake"},
   {"Chirp", "Bird"},
};

var animals = Console
   .ReadLine()?
   .Split(' ', StringSplitOptions.RemoveEmptyEntries)
   .Select(word => !dict.TryGetValue(word, out var animal) ? "N/A" : animal)
   .ToList();

if (animals?.Any() == true)
   Console.WriteLine(string.Join(", ", animals));
else
   Console.WriteLine("Nothing entered");

इनपुट

grr bob chirp ssss

आउटपुट

Lion, N/A, Bird, Snake

अतिरिक्त संसाधन

स्ट्रिंग.विभाजन विधि

एक स्ट्रिंग सरणी देता है जिसमें इस उदाहरण में सबस्ट्रिंग होते हैं जो एक निर्दिष्ट स्ट्रिंग या यूनिकोड वर्ण सरणी के तत्वों द्वारा सीमित होते हैं।

शब्दकोश(IEqualityComparer)

IEqualityComparer<T> कुंजियों की तुलना करते समय उपयोग करने के लिए कार्यान्वयन, या कुंजी के प्रकार के लिए डिफ़ॉल्ट EqualityComparer<T> का उपयोग करने के लिए शून्य।

Dictionary.TryGetValue(TKey, TValue) Method

निर्दिष्ट कुंजी से संबद्ध मान प्राप्त करें।

गणना योग्य। विधि का चयन करें

अनुक्रम के प्रत्येक तत्व को एक नए रूप में प्रोजेक्ट करता है।

स्ट्रिंग.जुड़ें

प्रत्येक तत्व या सदस्य के बीच निर्दिष्ट विभाजक का उपयोग करके, एक निर्दिष्ट सरणी के तत्वों या संग्रह के सदस्यों को जोड़ता है।

अशक्त-सशर्त ऑपरेटरों ?. तथा ?[]

सी # 6 और बाद में उपलब्ध, एक शून्य-सशर्त ऑपरेटर एक सदस्य पहुंच, ?., या तत्व पहुंच, ?[], ऑपरेशन को अपने ऑपरेंड पर तभी लागू करता है जब वह ऑपरेंड गैर-शून्य पर मूल्यांकन करता है; अन्यथा, यह शून्य लौटाता है

भाषा एकीकृत क्वेरी (LINQ)

भाषा-एकीकृत क्वेरी (LINQ) सी # भाषा में सीधे क्वेरी क्षमताओं के एकीकरण के आधार पर प्रौद्योगिकियों के एक समूह का नाम है। परंपरागत रूप से, डेटा के विरुद्ध प्रश्नों को संकलन समय या IntelliSense समर्थन पर टाइप जाँच के बिना सरल स्ट्रिंग के रूप में व्यक्त किया जाता है। इसके अलावा, आपको प्रत्येक प्रकार के डेटा स्रोत के लिए एक अलग क्वेरी भाषा सीखनी होगी: SQL डेटाबेस, XML दस्तावेज़, विभिन्न वेब सेवाएँ, और इसी तरह। LINQ के साथ, एक क्वेरी क्लास, मेथड्स, इवेंट्स की तरह ही एक फर्स्ट-क्लास लैंग्वेज कंस्ट्रक्शन है। आप भाषा कीवर्ड और परिचित ऑपरेटरों का उपयोग करके वस्तुओं के दृढ़ता से टाइप किए गए संग्रह के खिलाफ प्रश्न लिखते हैं।

0
TheGeneral 2 नवम्बर 2020, 02:43

युगल चीजें इसे करना आसान बना सकती हैं।

सबसे पहले आपको अंतरिक्ष सीमित इनपुट को पार्स करने के लिए नियमित अभिव्यक्ति की आवश्यकता नहीं है। तो जब तक कि यह एक आवश्यकता न हो, आप केवल String.Split का उपयोग कर सकते हैं।

दूसरा आप इनपुट टोकन से मिलान करने के लिए स्विच स्टेटमेंट या स्विच एक्सप्रेशन का उपयोग कर सकते हैं। और आप इसे एक अलग विधि में भी तोड़ सकते हैं। यहां एक स्विच एक्सप्रेशन का उपयोग करके एक उदाहरण दिया गया है:

    static IEnumerable<string> ToAnimal(IEnumerable<string> sounds)
    {
        foreach (var sound in sounds)
        {
            yield return sound switch
            {
                "Grr" => "Lion",
                "Rawr" => "Tiger",
                "Ssss" => "Snake",
                "Chirp" => "Bird",
                _ => throw new ArgumentException("unknown sound")
            };
        }
    }

आप इसे string.Split से परिणाम का उपयोग करके कॉल कर सकते हैं। इस तरह:

    static void Main(string[] _)
    {
        string RawInput = "Grr Grr Rawr Ssss";

        string[] sounds = RawInput.Split(' ');

        foreach (var animal in ToAnimal(sounds))
        {
            Console.Write(animal);
            Console.Write(' ');
        }

        Console.WriteLine();

    }

जाहिर है आप इनपुट स्ट्रिंग प्राप्त करने के लिए कंसोल.रीडलाइन का उपयोग करना चाहेंगे।

0
MikeJ 2 नवम्बर 2020, 01:59

इसे सुधारने के कुछ तरीके हैं लेकिन सबसे सरल सलाह यह हो सकती है कि एक आउटपुट स्ट्रिंग का निर्माण करें, उसमें जोड़ें और इसे एक ही स्टेटमेंट में कंसोल पर लिखें, कुछ इस तरह (अर्ध छद्म कोड):

//Intitialize an output string
var output = "";

foreach(Match match in matches)
//Add to output
If(word== "Grr")
    { outPut += "Lion ";}
      ...
}
//Then after all results are added to the string, print the string
Console.WriteLine(output)
1
Jmath 3 नवम्बर 2020, 16:30

Console.WriteLine("...") के बजाय केवल Console.Write("...") लिखें, ताकि आप नई पंक्ति पर नहीं, बल्कि उसी लाइन पर लिखें। फिर प्रत्येक शब्द के बाद एक स्थान जोड़ें जो आउटपुट (Console.Write("Tiger ");) होना चाहिए, जैसा कि निम्नलिखित कोड में दर्शाया गया है:

using System;
using System.Reflection.Metadata;
using System.Runtime.CompilerServices;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Text.RegularExpressions;

namespace nekaVjezba
{
    class Program
    {
        static void Main(string[] args)
        {
            var text = Console.ReadLine();
            var matches = Regex.Matches(text, @"\w+[^\s]*\w+|\w");
           

        foreach (Match match in matches)
        {
          var word = match.Value;
          if (word == "Grr")
          {
            Console.WriteLine("Lion ");
          }
          else if (word == "Rawr")
          {
            Console.Write("Tiger ");
          }
          else if (word == "Ssss")
          {
            Console.Write("Snake ");
          }
          else if (word == "Chirp")
            Console.Write("Bird ");
          }
        }
    }
}

आउटपुट अब यह हो सकता है: "लायन लायन टाइगर स्नेक"

1
SwissCodeMen 2 नवम्बर 2020, 01:23