2015-06-13 2 views
-6

Я пытаюсь удалить одиночные гласные из строки, но нет, если гласная двойная.Как удалить определенные символы

Например, строка

"Я Сохраняя Foobar"

следует распечатать, как

"м keepng foobr"

Я пытался все, но пока не придумали решение.

+3

Не следует ли печатать «m keepng foobr»? – zneak

+1

А как насчет тройных гласных? Вы держите все три, или вы удаляете один? – zneak

+0

Вы должны попытаться написать код вместо «всего» и опубликовать его в своем вопросе. Попытка «всего» редко помогает - вам обычно нужно настраивать свои попытки. :) –

ответ

0

Вы могли бы попробовать эту логику:

  1. петля корыта строку и проверить два два символа
  2. если (isBothVowelsAndEqual()) ничего не делать; else removeFirstChar();

EDIT:

public List<char> vowels = "AEIOUaeiou".ToList(); 
public bool isBothVowelsAndEqual(char first, char second) 
    { 
     return (first == second && vowels.Contains(first)); 
    } 

const string s = "I am keeeping a foobar"; 
string output=String.Empty; 
for (int i = 0; i < s.Length-1; i++) 
{ 
    if (isBothVowelsAndEqual(s[i], s[i + 1])) 
    {       
     output = output + s[i] + s[i+1]; 
     i++; 
    } 
    else 
    { 
     if (!vowels.Contains(s[i])) { 
     output += s[i]; 
    } 
    }     
} 
Console.WriteLine(output.Trim()); 
0

Try:

Regex.Replace(input, @"([aeiou])\1", ""); 

Хотя для I am keeping a foobar, это даст вам m keepng foobr, который отличается от вашего требуется m keepng foobr, так как вы лишены пространства из ваш требуемый результат тоже.

Если вы хотите удалить посторонние пространства, то это трехступенчатая операция: удалить гласные; удалять промежуточные/конечные пробелы; удалите двойные пробелы.

var raw = Regex.Replace(input, @"([aeiou])\1", ""); 
var trimmed = raw.Trim(); 
var final = trimmed.Replace(" ", " "); 
Смежные вопросы