Ввести две строки символов и заменить слова - C#
Формулировка задачи:
Задание для консольного приложения: Ввести две строки символов и заменить каждое слово, начинающееся с гласной буквы первой строки на слово, начинающееся с согласной буквы во второй строке. Вывести полученный результат.
Решение задачи: «Ввести две строки символов и заменить слова»
textual
Листинг программы
using System;
using System.Linq;
using System.Text.RegularExpressions;
namespace ConsoleApplication10
{
class Program
{
static string toReplace = "";
static int count = 0;
static void Main(string[] args)
{
//Console.WriteLine("Введите строку 1: ");//раскомментировать
//string first = Console.ReadLine();
//Console.WriteLine("Введите строку 2: ");
//string second = Console.ReadLine();
string wordBeforeReplace;
/*debug info*/
string first = "в этой строке изменить первую букву, если она гласная";
string second = "из этой строки взять первую согласную!";
/**/
string firstReplaced = first;
//сначала надо убрать знаки препинания и прочий мусор
Regex newReg = new Regex(@"[^0-9a-zа-я ]", RegexOptions.IgnoreCase);
MatchCollection matches = newReg.Matches(first);
foreach (Match mat in matches)
{
first = first.Replace(mat.ToString(), "").ToLower();//сразу приводим к нижнему регистру
second = second.Replace(mat.ToString(), "").ToLower();
}
//бъём в массив, разделитель слов теперь четко " "
string[] arFirst = first.Split(' ');
string[] arSecond = second.Split(' ');
//Во втором массиве надо найти первое слово, которое начинаетя с согласной
foreach (string s in arSecond)
{
if (isntStartWithVowel(s, true))
{
if (count == 1)
break;
}
}
//заменяем
for (int i = 0; i < arFirst.Length; i++ )
{
if (isntStartWithVowel(arFirst[i], false))
{
wordBeforeReplace = arFirst[i];
arFirst[i] = toReplace + arFirst[i].Substring(1);
firstReplaced = firstReplaced.Replace(wordBeforeReplace, arFirst[i]);
}
}
Console.WriteLine("Согласная: {0}", toReplace);
Console.WriteLine("Строка 1 после замены: {0}", firstReplaced);
Console.ReadKey();
}
static bool isntStartWithVowel(string checkedAr, bool fromSecond)
{
//гласные русские и латинские
char[] letter = { 'a', 'e', 'i', 'o', 'u', 'а', 'е', 'ё', 'и', 'о', 'у', 'ы', 'э', 'ю', 'я' };
char[] lett = checkedAr.ToCharArray();
if(letter.Contains(lett[0]))
return true;
if (fromSecond)
{
toReplace = lett[0].ToString();
count += 1;
}
return false;
}
}
}