Нужна помощь в реализации Hashtable - PullRequest
2 голосов
/ 06 апреля 2010

Я довольно новичок в C #, я пытался написать программу, которая извлекает слова из введенной строки, пользователь должен ввести минимальную длину слова, чтобы отфильтровать вывод слов ... мой код не Выглядят хорошо или интуитивно, я использовал два массива countStr для хранения слов, countArr для хранения длины слова, соответствующей каждому слову ... но проблема в том, что мне нужно использовать хеш-таблицы вместо этих двух массивов, потому что оба их размера в зависимости от длины строки, которую вводит пользователь, я думаю, что это не слишком безопасно для памяти или что-то в этом роде?

вот мой скромный код, снова я пытаюсь заменить эти два массива на одну хеш-таблицу, как это можно сделать?

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

namespace ConsoleApplication2
{
class Program
{

    static void Main(string[] args)
    {
        int i = 0 ;
        int j = 0;
        string myString = "";
        int counter = 0;
        int detCounter = 0;          

        myString = Console.ReadLine();
        string[] countStr = new string[myString.Length];
        int[] countArr = new int[myString.Length];

        Console.Write("Enter minimum word length:");
        detCounter = int.Parse(Console.ReadLine());

        for (i = 0; i < myString.Length; i++)
        {
            if (myString[i] != ' ')
            {
                counter++;
                countStr[j] += myString[i];
            }
            else
            {
                countArr[j] = counter;
                counter = 0;
                j++;
            }                                               
        }

        if (i == myString.Length)
        {
            countArr[j] = counter;
        }

        for (i = 0; i < myString.Length ; i++)
        {
           if (detCounter <= countArr[i])
            {
                Console.WriteLine(countStr[i]);
            }   
        }

     Console.ReadLine();     

    }        
  }
 } 

Ответы [ 3 ]

12 голосов
/ 06 апреля 2010

Вы не слишком плохо справляетесь с первой попыткой, но это может быть намного лучше.

Первое: используйте TryParse вместо Parse при анализе целочисленного ввода человеком.Если человек вводит в «HELLO» вместо целого числа, ваша программа завершится сбоем, если вы используете Parse;Parse используется только тогда, когда вы знаете , что это целое число.

Следующее: рассмотрите возможность использования String.Split, чтобы разбить строку на массив слов, а затем обработать массив слов.

Следующее: код, подобный вашему, с большим количествомМутации массива трудно читать и понимать.Попробуйте описать вашу проблему как запрос.Что ты пытаешься спросить?Я не уверен, что полностью понимаю ваш код, но для меня это звучит так, будто вы пытаетесь сказать: «Возьми эту строку слов, разделенных пробелами. Возьми минимальную длину. Дай мне все слова в этой строке, которые больше минимальнойдлина «.Да?

В таком случае напишите код, который выглядит следующим образом:

string sentence = whatever;
int minimum = whatever;
var words = sentence.Split(' ');
var longWords = from word in words 
                where word.Length >= minimum 
                select word;
foreach(var longWord in longWords) 
    Console.WriteLine(longWord);

И вот, пожалуйста.Обратите внимание, что код читается так, как он делает.Попробуйте написать код так, чтобы код передавал значение кода, а не механизм кода.

0 голосов
/ 06 апреля 2010

Используйте словарь для этого (в вашем случае вы ищете словарь).

Ваша извлеченная строка будет ключом, длина этого значения.

Dictionary<string, int> words = new Dictionary<string,int>();
//algorithm
words.Add(word, length);
0 голосов
/ 06 апреля 2010

Одно слово. Словарь (или HashTable). Оба являются стандартными типами данных, которые вы можете использовать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...