Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用c语言生成单词组合数组#_C#_Regex - Fatal编程技术网

C# 用c语言生成单词组合数组#

C# 用c语言生成单词组合数组#,c#,regex,C#,Regex,我有一个字符串,比如“大坏狗”,我怎样才能得到一个包含所有可能的单词/短语组合的字符串[]数组 因此,我想返回“big”、“bad”、“dog”、“big bad”、“bad dog”和“big bad dog”-因此必须尊重原始字符串中单词的顺序 这是可以用正则表达式实现的吗?string[]array=newstring[]{“big”、“bad”、“dog”}; string[] array = new string[]{"big", "bad", "dog"}; for(ulong ma

我有一个字符串,比如“大坏狗”,我怎样才能得到一个包含所有可能的单词/短语组合的字符串[]数组

因此,我想返回“big”、“bad”、“dog”、“big bad”、“bad dog”和“big bad dog”-因此必须尊重原始字符串中单词的顺序

这是可以用正则表达式实现的吗?

string[]array=newstring[]{“big”、“bad”、“dog”};
string[] array = new string[]{"big", "bad", "dog"};
for(ulong mask = 0; mask < (1ul << array.Length); mask++)
{
    string permutation = "";
    for(int i = 0; i < array.Length;  i++)
    {
        if((mask & (1ul << (array.Length - 1 - i))) != 0)
        {
            permutation += array[i] + " ";
        }
    }
    Console.WriteLine(permutation);
}

对于(ulong mask=0;mask<(1ul如何将字符串拆分为单独的单词数组

string str = "big fat dog";
string[] words = str.Split(new Char[] { ' ', ',', '.', ':', '\t' });
然后你可以用它来组合单词

string[]words=新字符串[]{“大”、“坏”、“狗”};

对于(int mask=0;mask<1我认为这是一个递归解决的好问题。我的观点:

public static String[] findWords(params string[] args)
{

        if (args.Count() == 0)
        {
            return new String[] { "" };
        }
        else
        {
            String[] oldWords = findWords(args.Skip(1).ToArray());
            String[] newWords = oldWords.Where(word => word == "" || word.Split(new String[] { " " }, StringSplitOptions.RemoveEmptyEntries)[0] == args[1])
                                        .Select(word => (args[0] + " " + word).Trim()).ToArray();

            return oldWords.Union(newWords).ToArray();
        }
} 
A
findWords(“大”、“坏”、“狗”)
返回您的短语列表


编辑:编辑为只包含连续的短语。

关于“大狗”呢?因为它仍然保留顺序,但忽略了中间的单词。我最近做了一个“类似蛮力的”例行公事就是这样,但用字母。它不使用正则表达式,或者我会把它贴在这里当你学习正则表达式时,一切看起来都像钉子……关于“大狗”的好观点但不,这不算。我想更好的说法是,我需要所有连续的单词/短语。这解决了问题,但没有完全回答老年退休金计划的问题。如果超过32个单词呢?(我知道,前40亿个单词需要一段时间,但现在机器速度很快。)这解决了问题,但没有完全回答老年退休金问题。这解决了问题,但没有完全回答老年退休金问题。谢谢Jens,这正是我想要的。只有一个小问题(我在最初的帖子中没有解释),那就是我只想要连续的单词或短语,所以“大狗”不应该是匹配的。您的代码有什么可以修改的吗?@Stuart:Edited。它失去了优雅,尽管=)嗨@Jen,太好了。非常感谢。希望我的感谢能以某种方式弥补您代码优雅的损失!:)
public static String[] findWords(params string[] args)
{

        if (args.Count() == 0)
        {
            return new String[] { "" };
        }
        else
        {
            String[] oldWords = findWords(args.Skip(1).ToArray());
            String[] newWords = oldWords.Where(word => word == "" || word.Split(new String[] { " " }, StringSplitOptions.RemoveEmptyEntries)[0] == args[1])
                                        .Select(word => (args[0] + " " + word).Trim()).ToArray();

            return oldWords.Union(newWords).ToArray();
        }
}