在Hashtable实现中需要帮助

时间:2010-04-06 19:54:42

标签: c# string hashtable

我是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 个答案:

答案 0 :(得分:12)

第一次尝试你的表现并不是太糟糕,但这可能要好得多。

首先:在解析人类输入的整数时使用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);

你去吧。注意代码如何读取它正在做的事情。尝试编写代码,以便代码传达代码的含义,而不是代码的机制

答案 1 :(得分:0)

一个字。 Dictioary(或HashTable)。两者都是您可以使用的标准数据类型

答案 2 :(得分:0)

为此使用字典(在您的情况下,您正在寻找字典)。

您提取的字符串将是密钥,其长度为值。

Dictionary<string, int> words = new Dictionary<string,int>();
//algorithm
words.Add(word, length);
相关问题