Как получить цикл for для вывода результатов только один раз при использовании подстроки - PullRequest
0 голосов
/ 18 февраля 2019

Цикл повторяет вывод для всего диапазона слова.

Я попытался запустить console.write внутри и снаружи цикла.Я также попытался изменить значения инкремента и подстроки.

 Console.WriteLine("Enter a word.");
            string userWord = Console.ReadLine();
            Console.WriteLine();
            Console.WriteLine("You wrote {0}", userWord);
            Console.WriteLine();

            userWord.ToLower();
            char[] wordArray = userWord.ToArray();


            for (int i = 0; i <= wordArray.Length; i++)
            {
                string theLetter = userWord.Substring(i, 1);

                //theLetter = theLetter.ToLower();
                string rebuilt = new string(wordArray);

                if (wordArray[i] == 'a' || wordArray[i] == 'e' || wordArray[i] == 'i' || wordArray[i] == 'o' || wordArray[i] == 'u')
            {
                    wordArray[i] = '$';

                }


                Console.WriteLine("Your word is now: {0}", rebuilt);
                Console.WriteLine("The total number of letters in your word is {0}", userWord.Length);
            }
            Console.ReadLine();

console.write должен отображать свой вывод только один раз.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Это просто.Вы должны проверить, находится ли цикл в последней итерации перед печатью.

 Console.WriteLine("Enter a word.");
        string userWord = Console.ReadLine();
        Console.WriteLine();
        Console.WriteLine("You wrote {0}", userWord);
        Console.WriteLine();

        userWord.ToLower();
        char[] wordArray = userWord.ToArray();


        for (int i = 0; i <= wordArray.Length; i++)
        {
            string theLetter = userWord.Substring(i, 1);

            //theLetter = theLetter.ToLower();
            string rebuilt = new string(wordArray);

            if (wordArray[i] == 'a' || wordArray[i] == 'e' || wordArray[i] == 'i' || wordArray[i] == 'o' || wordArray[i] == 'u')
            {
                wordArray[i] = '$';

            }
            if(i==userWord.Length)
            {
            Console.WriteLine("Your word is now: {0}", rebuilt);
            Console.WriteLine("The total number of letters in your word is {0}", userWord.Length);
            }
        }
        Console.ReadLine();      
0 голосов
/ 19 февраля 2019

Вам необходимо переместить Console.WriteLine за пределы цикла.Кроме того, необходимо изменить условие цикла, чтобы исключить ArguementOutOfRangeException.

for (int i = 0; i < wordArray.Length; i++)

В вашем коде есть еще одна ошибка.Вы конвертируете userWord в нижний регистр, но не сохраняете результат.

userWord.ToLower();

Необходимо заменить вышеуказанную строку на

userWord = userWord.ToLower();

Полный код

Console.WriteLine("Enter a word.");
string userWord = Console.ReadLine();
Console.WriteLine();
Console.WriteLine("You wrote {0}", userWord);
Console.WriteLine();

userWord = userWord.ToLower();
char[] wordArray = userWord.ToArray();

for (int i = 0; i < wordArray.Length; i++)
{
        if (wordArray[i] == 'a' || wordArray[i] == 'e' || wordArray[i] == 'i' || wordArray[i] == 'o' || wordArray[i] == 'u')
        {
            wordArray[i] = '$';

        }
 }

var rebuildWord = new string(wordArray);
Console.WriteLine("Your word is now: {0}", rebuildWord);
Console.WriteLine("The total number of letters in your word is {0}", userWord.Length);

Только для вашей информации вы можете достичьто же самое, используя Regex.

Console.WriteLine("Enter a word.");
string userWord = Console.ReadLine();
Console.WriteLine();
Console.WriteLine("You wrote {0}", userWord);
Console.WriteLine();


var rebuildWord = Regex.Replace(userWord,@"[aeiouAEIOU]","$");


Console.WriteLine("Your word is now: {0}", rebuildWord);
Console.WriteLine("The total number of letters in your word is {0}", userWord.Length);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...