Исправте пожалуйста - 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; } }