【问题标题】:get all combination of consecutive elements of string array while keeping the remaining elements C#获取字符串数组的连续元素的所有组合,同时保留剩余元素 C#
【发布时间】:2011-02-02 13:12:31
【问题描述】:

我是编程新手,但我很难完成以下任务。

我有一个字符串,比如说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 个连续词等的子字符串。

最后搜索每个单词。

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

我希望我的观点清楚.. 任何帮助将不胜感激......

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

【问题讨论】:

  • 你使用的是哪个数据库?

标签: c# string search combinations


【解决方案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));
            }
        }
    }
}

编辑

抱歉,我不能 100% 确定我是否正确理解了您想要的内容 :)
这更像吗?

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));
            }
        }
    }
}

【讨论】:

  • 谢谢你..这个函数为我提供了所有的组合,但你知道在哪里保存剩余的子字符串吗?例如。如果我找到子字符串“Unites States”的匹配项,我想按照相同的原则检查剩余的子字符串“Bacliff New Texas”..
  • 查看编辑后的答案...我希望我能正确理解您现在的要求:)
  • 这样就可以了!!!!!!!!!!!!!!!!!!!!!!!!!非常感谢您的帮助!!!!!!!!!!!!! !!!!!!!!!!!!现在我只需要弄清楚关于存在循环的条件的一些细节..
  • @katerina:很高兴它有帮助 :) 如果这很有用,请投票和/或将其标记为已接受的答案。
  • @katerina:我认为你需要一定的声誉才能投票给答案,但别担心 :) 我之所以这么说只是因为我认为你是新用户
【解决方案2】:

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

【讨论】:

  • 谢谢..我的问题不是如何询问数据库,而是如何生成所有这些子字符串..
猜你喜欢
  • 2019-04-08
  • 2019-08-13
  • 2015-03-18
  • 2017-10-28
  • 2012-04-03
  • 1970-01-01
  • 2019-05-31
  • 1970-01-01
  • 2017-10-11
相关资源
最近更新 更多