Генерация символьного массива из ограниченного числа символов

Рейтинг: 2Ответов: 1Опубликовано: 20.04.2015

Как сделать так, чтобы созданный массив с помощью ДСЧ формировался из символов типа char, которые можно набрать с клавиатуры?Мб нужно задать какое-н. ограничение, но какое?

Задача: Создать двумерный массив из элементов типа char. При заполнении массива использовать 2 способа (ручной и с помощью ДСЧ). Массив вывести на печать. Удалить из массива все строки, в которых нет цифр, используя, по возможности, методы класса Array. Результаты обработки вывести на печать.

Вроде всё работает, но при создании массива с помощью ДСЧ получаются очень интересные символы, как можно сделать так, чтобы остались только стандартные символы типа char?

Написала следующий код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DeleteWordsInArrayChar
{
    static class Program
    {

        static void Main(string[] args)
        {
            try
            {

                Console.WriteLine("введите количество строк: ");
                int SizeRows = int.Parse(Console.ReadLine());
                if(SizeRows <= 0) Console.WriteLine("Слишком маленькая длина");
                else
                {
                    string[] strArr = new string[SizeRows];
                    Random r = new Random();

                    Console.WriteLine("1 - Заполнение с помощью ДСЧ");
                    Console.WriteLine("2 - Ручное заполнение");
                    int n = int.Parse(Console.ReadLine());
                    switch(n)
                    {
                        case 1:
                            for(int i = 0; i < strArr.Length; i++)
                            {
                                Random rr = new Random();
                                int size = r.Next(2, 50);
                                char[] array = new char[size];
                                Random rnd = new Random();
                                for(int j = 0; j < array.Length; j++)
                                {
                                    Random rrr = new Random();
                                    if(array.Length > rr.Next(2, 5))
                                    {
                                        array[j] = Convert.ToChar(rnd.Next('1' + '9'));
                                        strArr[i] += array[j];
                                    }
                                    else
                                    {
                                        array[j] = Convert.ToChar(rnd.Next('a' + 'z' + 1));
                                        strArr[i] += array[j];
                                    }
                                }
                            }
                            break;
                        case 2:
                            Console.WriteLine("Введите текст: ");
                            for(int i = 0; i < strArr.Length; i++)
                                strArr[i] = Console.ReadLine();
                            break;
                        default:
                            Console.WriteLine("Не верный выбор!");
                            break;

                    }
                    Console.WriteLine();
                    Console.WriteLine("Исходная строка: ");
                    for(int i = 0; i < strArr.Length; i++)
                        Console.WriteLine(strArr[i]);

                    string[] Newstr = new string[SizeRows];
                    char[] op = new char[9] { '1', '2', '3', '4', '5', '6', '7', '8', '9' };
                    int count = 0;
                    for(int i = 0; i < strArr.Length; i++)
                        for(int j = 0; j < 9; j++)
                            if(strArr[i].Contains(op[j]))
                            {
                                Newstr[count++] = strArr[i];
                                break;
                            }
                    Console.WriteLine();
                    Console.WriteLine("текст только с цифрами: ");
                    foreach(string s in Newstr)
                        Console.WriteLine(s);
                }
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.WriteLine("Для выхода нажмите Enter...");
            Console.ReadKey();
        }
    }
}

Не принимают такой вариант решения. Не знаю, как исправить код.

Ответы

▲ 2

Вы используете метод Random.Next, который задаёт только верхнюю границу. Но ниже этой границы так же есть непечатаемые символы, поэтому Вам нужно задавать как верхнюю, так и нижнюю границы, т.е.

array[j] = Convert.ToChar(rnd.Next('1', '9' + 1));

и

array[j] = Convert.ToChar(rnd.Next('a', 'z' + 1));