我是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();
}
}
}
答案 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);