Исправте пожалуйста - C#

Узнай цену своей работы

Формулировка задачи:

как сделать без создания масива
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {            
             Console.WriteLine("Введите предложение");
             string str = Console.ReadLine();
 
             string[] words = str.Split(new string[]{ ",", ".", "!", "?", ";", ":", " " }, StringSplitOptions.RemoveEmptyEntries);
 
             byte n = Convert.ToByte(words.Length);
             byte a = 0;
             str = "";            
 
             for (int i = 0; i < n; i++)
             {
                 for (int j = 0; j < n; j++)
                 {
                     if (words[i] == words[j])
                         a++;
                     if (a > 1 && words[i] == words[j])
                         words[j] = "";
                 }
 
                 if(words[i]!="")
                     str += words[i] + " ";
                         
                 a = 0;
             }
 
             Console.WriteLine();
             Console.WriteLine(str);             
            
            Console.ReadKey();
        }
    }
}

Решение задачи: «Исправте пожалуйста»

textual
Листинг программы
 static string words;
 static string Splitters = ".,!?:; ";
 static void Main(string[] args)
        {
            Console.WriteLine("Пишите предложение");
            words = Console.ReadLine(); //читаем исследуемую строку
            int word_start = 0;
            int word_end = 0; //начало и конец слова между разделителями
            string word = "";
            for (int i = 0; i < words.Length; i++)
            {
                
                if (CheckChar(i) ) 
                {
                    word_end=i; //пока нет разделителей накручиваем слово
                }
                else //иначе, вынимаем слово и удаляем повторы
                {
                    
                    word_end = i;
                    word = words.Substring(word_start, word_end-word_start);
                    if (word != "")
                    {
                        RemoveWord(word,ref i);
                        word_start = i;
                        word_end = i;
                    }
                    
                }
            }
            Console.WriteLine("Результат: " + words);
        }
        //возвращает false если указаный символ является разделителем
        static bool CheckChar(int index) 
        {
            bool result = true;
            foreach(char ch in Splitters)
            {
                result &= ch != words[index];
            }
            return result;
        }
        //рекурсивно удаляет слова, пока не останется ни одного
        static void RemoveWord(string word,ref int start_index)
        {
            int remove_index = words.IndexOf(word, start_index);//нашли еще одно слово
            if (remove_index == -1) return; //не нашли, значит выходим из функции
            else  //если нашли, убираем его, и ищем еще раз
            {
                 //сдвигаем счетчик так как стрка укорачивается на слово
                words = words.Remove(remove_index, word.Length);
                RemoveWord(word,ref start_index);
                start_index -= word.Length;
            }
        }

Оцени полезность:

9   голосов , оценка 4.333 из 5
Похожие ответы