точку должно добавлять только если в конце строки какой-то символ или цифра?c#/string

  1. точку должно добавлять только если в конце строки какой-то символ или цифра. Или по другому: точку надо добавлять, только если в конце нету уже точки/запятой/знака восклицания/точки с запятой.

  2. знаков препинания больше чем запятая и двоеточие. Есть еще: !?._;

  3. знаки препинания должно заменять(реплейсить) в цикле. Оно должно убирать двойные запятые до тех пор, пока они там есть. Их может быть не две подряд, а 20 например. То-есть надо проверять в условии цикла или есть двойные запятые, и если есть то заменять. И так постоянно, пока двойных запятых там не останется. Оно так должно делать с каждым знаком пунктуации (для каждого из них отдельный цикл).

         Console.WriteLine("Введите строку:");
         string str = (Console.ReadLine());
    
         str = str.Replace(",,", ",");
         str = str.Replace("::", ":");
         str += ".";
    
         if (str.Length > 0)
             str = str[0].ToString().ToUpper() + str.Remove(0, 1).Trim();
         Console.WriteLine(str);
     }   
    

    } }


Ответы (2 шт):

Автор решения: Dima Dima
        Console.WriteLine("Введите строку:");
        string str = (Console.ReadLine());
        if (str.Length > 0)
            str = str[0].ToString().ToUpper() + str.Remove(0, 1).Trim();

        if (str.EndsWith("!") == true)
            str += "";
        else if (str.EndsWith("?") == true)
            str += "";
        else if (str.EndsWith("-") == true)
            str += "";
        else if (str.EndsWith(".") == true)
            str += "";
        else if (str.EndsWith(";") == true)
            str += "";
        else if   (str.EndsWith(".?-.;") == false)
            str += ".";

        while (str.Contains(",,"))
            str = str.Replace(",,", ",");
        while (str.Contains("::"))
            str = str.Replace("::", ":");
        while (str.Contains("!!"))
            str = str.Replace("!!", "!");
        while (str.Contains("??"))
            str = str.Replace("??", "?");
        while (str.Contains(".."))
            str = str.Replace("..", ".");
        while (str.Contains("--"))
            str = str.Replace("--", "-");
        while (str.Contains(";;"))
            str = str.Replace(";;", ";");
       Console.WriteLine(str);
    }
}

}

→ Ссылка
Автор решения: aepot

Давайте попробую я, постараюсь попроще

Console.WriteLine("Введите строку:");
string text = Console.ReadLine();

// первую букву заглавной, хотя этого в условии нет, но есть в коде
text = char.ToUpper(text[0]) + text.SubString(1);

string chars = ".,?!:;-"; // все символы пунктуации

// поставить точку, если не символ в конце
if (Array.IndexOf(chars, text[text.Length - 1]) < 0)
    text += '.';

// убрать дубликаты
foreach (char c in chars)
{
    string dup = new string(c, 2);
    while (text.Contains(dup))
        text = text.Replace(dup, c.ToString());
}
→ Ссылка