获取字符串数组的连续元素的所有组合,同时保留其余元素C#

时间:2011-02-02 13:12:32

标签: c# string search combinations

我是编程新手,我在完成以下任务时遇到了困难。

我有一个字符串让我们说string final_word="Bacliff New Texas United States";,我想做以下事情:

首先检查数据库中的整个字符串,如果存在匹配,如果没有,我就可以了 我想搜索子串"Bacliff New Texas United"

如果找到匹配项,我将搜索子字符串"States",否则我将搜索子字符串"New Texas United States",如果找到匹配项,则搜索子字符串"Bacliff"

如果不是,则搜索子字符串"Bacliff New Texas"。如果找到匹配项,则搜索子字符串"United States",如果找不到匹配字符串"United"的最后一个子字符串搜索的匹配项, "States"

否则搜索子串"New Texas United",现在如果找到匹配,我将在数据库中搜索两个单独的子串"Bacliff""States",因为我希望所有子串都是顺序的原始字符串中的单词。我将继续以同样的方式看待。如果找不到两个单词的每个组合的匹配,我将搜索每个单词。

简而言之,

首先我必须搜索整个字符串

其次,搜索包含5个单词的子字符串,但保留其他字符串,以防第一个子字符串找到匹配项。

第三,搜索连续4个单词的sunstrings,并保留其他单词的原始位置。

接下来搜索带有3个连续词等的子串。

最后搜索每个单词。

如果在任何时候找到任何单词组合的匹配,我会存储这个单词并继续以相同的方式查找其他组合..

我希望我明白我的观点...... 任何帮助都会得到真正的赞赏....

提前谢谢.........

2 个答案:

答案 0 :(得分:1)

如果您使用的是Ms SQL,那么最好使用全文搜索

答案 1 :(得分:1)

您可以将输入字符串拆分为数组,然后重新连接连续字的子数组:

using System;

class Program {
    static void Main(string[] args) {
        string full = "Bacliff New Texas United States";
        // split the string in words
        string[] words = full.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
        // get substrings 'size' words long
        for (int size = 1; size <= words.Length; ++size) {
            string[] destination = new string[size];
            for (int start = 0; start <= words.Length - size; ++start) {
                Array.Copy(words, start, destination, 0, size);
                Console.WriteLine(string.Join(" ", destination));
            }
        }
    }
}

修改

对不起,我不是百分百确定我是否理解你想要的东西:)
这更像是吗?

using System;

class Program {
    static void Main(string[] args) {
        string full = "Bacliff New Texas United States";
        // split the string in words
        string[] words = full.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
        for (int size = 1; size < words.Length; ++size) {
            // get substrings of 'size' words
            for (int start = 0; start <= words.Length - size; ++start) {
                string[] before = new string[start];
                string[] destination = new string[size];
                string[] after = new string[words.Length - (size + start)];
                Array.Copy(words, 0, before, 0, before.Length);
                Array.Copy(words, start, destination, 0, destination.Length);
                Array.Copy(words, start + destination.Length, after, 0, after.Length);
                Console.WriteLine("{0} % {1} % {2}",
                    string.Join(" ", before),
                    string.Join(" ", destination),
                    string.Join(" ", after));
            }
        }
    }
}