所以让我说我有这些论点:“aword1 bword dword zword aword2” 我必须把它们插入一个像这样的字符串数组中:
arrayofstrings[0][] = aword1 aword2
arrayofstrings[1][] = bword
arrayofstrings[2][] = null/nothing
arrayofstrings[3][] = dword
...
arrayofstrings[25][] = zword
我已经知道如何做到但这并不优雅。
我的解决方案:检查args中的每个单词是否为第一个字母(26个如果是26个案例)并在26个整数数组中增加计数器,这样我就可以知道必须分配多少空间并检查并将每个单词复制到[ ] [] arrayofstrings。
如果没有26个案例,我怎么能这样做?非常感激。如果您没有注意到我是c#的新手(来自c ++,vb)。
ps:我的字母表包含26个字母。
后来编辑:
这是我的示例代码(仅供您了解我想要的内容):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Lab4LineComanda
{
class Program
{
static void Main(string[] args)
{
string[][] ArrayOfStrings = new string[25][];
int[] counters = new int[26];
for (int i = 0; i < args.Length; i++)
{
if (args[i].First() == 'a')
counters[0]++;
if (args[i].First() == 'b')
counters[1]++;
//if's for each letter which I don't feel like doing
if (args[i].First() == 'z')
counters[25]++;
}
Array.Sort(args);
ArrayOfStrings[0] = new string[counters[0]];
ArrayOfStrings[1] = new string[counters[1]];
for (int i = 0; i < counters[0]; i++)
ArrayOfStrings[0][i] = args[i];
//again, for each letter i must do this, which, again, I don't feel like doing(there must be better way)
}
}
}
我不知道有多少以'a'开头的单词(如果有的话)。这适用于每一封信。
我必须使用字符串[] []进行教育。我使用了“c ++”标签,因为对我而言,它更像是一个逻辑问题,而不是语言特定的问题,但这是我的坏事。
对不起,我很难解释我想要的东西,因为英语很难(对我来说):)。
答案 0 :(得分:0)
您可以使用这样一个事实,即在字符表中,a
到z
的所有字母都按顺序排列。因此,您可以分配List<List<String>>
并获取要ord('a') - ord(firstChar)
添加的索引。
答案 1 :(得分:0)
以下是3行中的一种方法:
IList<IList<string>> allMyStrings = Enumerable.Repeat(0, 26)
.Select(x => new List<string>()).ToArray();
foreach (var arg in "aword1 bword dword zword aword2".Split(' '))
allMyStrings[arg[0] - 'a'].Add(arg);
我使用了string[][]
而不是List<string>[]
,因此内部列表会根据需要自行调整大小。为了计算要添加字符串的列表,我使用arg[0] - 'a'
,它计算参数的第一个字母和字符char
之间a
值的差异。它不是通用代码,因为如果任何参数不以a-z
中的字母开头,它将无法正常工作,但它适用于您的示例。