raf*_*ael 2 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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Eri*_*ert 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);
Run Code Online (Sandbox Code Playgroud)
你去吧 注意代码如何读取它正在做的事情.尝试编写代码,以便代码传达代码的含义,而不是代码的机制.