Причина, по которой вы получаете IndexOutOfRangeException
, заключается в том, что если вы посмотрите на два массива:
string[] phraseArray = new string[]{ phrase };
А
string[] newPhrase = new string[phrase.Length];
Длина обоих массивов совершенно различна, phraseArray
имеет длину 1, а для newPhrase будет задана длина вашей фразы, поэтому, если вы вставите мир длиной более 1 символа, оба массива не будут совпадать, а затем либо:
if (phraseArray[i] != phraseArray[j])
Или
newPhrase = phraseArray[i];
Сбой, особенно newPhrase = phraseArray[i];
, потому что здесь вы пытаетесь заменить newPhrase
массив на символ phrase[i]
. В основном ваше решение не будет работать. Так что вы можете сделать то, что предложил @ Travis , в основном измените ваши массивы с String[]
на char[]
, затем:
char[] phraseArray = phrase.ToCharArray();
Или вместо использования массивов вы можете просто использовать другую строку для фильтрации вашей фразы. Первая строка будет вашей фразой , а вторая будет строкой, к которой вы добавите неповторяющиеся символы. в основном это:
Console.WriteLine("Entrez une phrase SVP!!");
string phrase = Console.ReadLine();
string newPhrase = "";
// loop through each character in phrase
for (int i = 0; i < phrase.Length; i++) {
// We check if the character of phrease is within our newPhrase, if it isn't we add it, otherwise do nothing
if (newPhrase.IndexOf(phrase[i]) == -1)
newPhrase += phrase[i]; // here we add it to newPhrase
}
Console.WriteLine(newPhrase);
Не забудьте прочитать комментарии в коде.
Редактировать:
На основании комментариев и предложений я реализовал аналогичное решение:
Console.WriteLine("Entrez une phrase SVP!!");
char[] phrase = Console.ReadLine().ToCharArray();
char[] newPhrase = new char[phrase.Length];
int index = 0;
// loop through each character in phrase
for (int i = 0; i < phrase.Length; i++) {
// We check if the character of phrease is within our newPhrase, if it isn't we add it, otherwise do nothing
if (Array.IndexOf(newPhrase, phrase[i]) == -1)
newPhrase[index++] = phrase[i]; // here we add it to newPhrase
}
Console.WriteLine(newPhrase);