Informatika gyűjtemény

NézetNyomtat

kb_keres.cs (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: utf-8
Méret: 2 KB
using System;
using System.Text;
using System.IO;

namespace Keres
{
    class Program
    {
        private string[] words = new string[2];
        
        public Program()
        {
            StreamReader ins = new StreamReader("keres.be");
            words[0] = ins.ReadLine();
            words[1] = ins.ReadLine();
            ins.Close();
            
            ExpandByAsteriks();
            SearchMatchingWord();
        }

        private void SearchMatchingWord()
        {
            StringBuilder word;
            if( words[0].Length - words[1].Length != 0 ) {
                // nem sikerült egyenlő hosszúra csinálnunk -> nincs megoldás.
                word = new StringBuilder("NEM");
            } else {
                word = new StringBuilder();
                for( int i=0; i<words[0].Length; i++ ) {
                    if( words[0][i] == '*' && words[1][i] == '*' ) {
                        // semmit se csinálunk, ide nem rakunk karaktert
                    } else if( words[0][i] == '?' && words[1][i] == '?' ) {
                        word.Append("a"); // valamit oda rakunk.
                    } else if( words[0][i] == '?' || words[1][i] == '?' ) {
                        // ha valamelyik kérdőjel, akkor ide a sima karaktert választjuk
                        word.Append( words[0][i] == '?' ? words[1][i] : words[0][i] );
                    } else if( words[0][i] == '*' || words[1][i] == '*' ) {
                        // ha valamelyik csillag, akkor ide a sima karaktert választjuk
                        word.Append( words[0][i] == '*' ? words[1][i] : words[0][i] );
                    } else if( words[0][i] == words[1][i] ) {
                        // ha egyezik, akkor OK
                        word.Append( words[0][i] );
                    } else {
                        // Nincs ide illő karakter -> nem megoldható
                        word = new StringBuilder("NEM");
                        break;
                    }
                }
            }

            // output
            StreamWriter outs = new StreamWriter("keres.ki");
            outs.WriteLine(word.ToString());
            outs.Close();
        }

        private void ExpandByAsteriks()
        {
            int idx0 = words[0].LastIndexOf("*"), idx1 = words[1].LastIndexOf("*");
            
            if( idx0 != -1 || idx1 != -1 ) {
                // ha bármelyikben van *, akkor: pótolnunk kell *-okkal
                StringBuilder sb0 = new StringBuilder();
                for( int i=0; i<200-words[0].Length; i++ )
                    sb0.Append("*");
                StringBuilder sb1 = new StringBuilder();
                for( int i=0; i<200-words[1].Length; i++ )
                    sb1.Append("*");

                if( idx0 == -1 ) {
                    // Ha nincs benne * akkor a végére rakjuk a plusz csillagokat
                    words[0] = words[0].Insert( words[0].Length, sb0.ToString() );
                } else {
                    // Ha pedig van, akkor a * mellé
                    words[0] = words[0].Insert( idx0, sb0.ToString() );
                }

                if( idx1 == -1 ) {
                    words[1] = words[1].Insert( words[1].Length, sb1.ToString() );
                } else {
                    words[1] = words[1].Insert( idx1, sb1.ToString() );
                }               
            }
        }
        
        public static void Main(string[] args)
        {
            new Program();
        }
    }
}
(Vissza)