-1

所以假设我有这些参数:“aword1 bword dword zword aword2”
我必须将它们插入到这样的字符串数组中:

arrayofstrings[0][] = aword1 aword2
arrayofstrings[1][] = bword
arrayofstrings[2][] = null/nothing
arrayofstrings[3][] = dword
...
arrayofstrings[25][] = zword


我已经知道如何做到这一点,但它并不优雅。
我的解决方案:检查 args 中每个单词的第一个字母(26 个 if 或 26 个 case),并在 26 个整数数组中递增计数器,这样我就可以知道我必须分配多少空间,检查每个单词并将其复制到 [][]arrayofstrings .


如果没有 26 个 if 或 case,我该怎么做?非常感激。如果您没有注意到我是 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”开头的单词(如果有的话)。这适用于每个字母。
出于教育目的,我必须使用 string[][]。我使用了“c++”标签,因为对我来说它更像是一个逻辑问题,而不是一个特定于语言的问题,但这是我的坏事。
很抱歉混淆了,我很难准确地解释我想要什么,因为英语很难(对我来说):)。

4

2 回答 2

0

您可以使用这样一个事实,即在字符表中,从atoz开始的所有字母都是按顺序排列的。因此,您可以分配List<List<String>>并获取要添加的索引ord('a') - ord(firstChar)

于 2013-11-01T17:44:18.990 回答
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[][]我使用了 a而不是a List<string>[],这样里面的列表会根据需要自行调整大小。为了计算将字符串添加到哪个列表,我使用arg[0] - 'a',它计算char参数的第一个字母和字符之间的值的差异a。它不是通用代码,因为如果任何参数不以 from 的字母开头,它将无法正常工作a-z,但它适用于您的示例。

于 2013-11-01T17:45:28.680 回答