我有一串单词:
spring java spring spring spring javescript java jboss jboss tomcat jboss
我必须使用空格作为分隔符来分解这个字符串,然后我需要找到两种类型的对
- 组合对
- 下一步配对
我知道怎么拆分单词
string text = "spring java spring spring spring javescript java jboss jboss tomcat jboss";
string[] list = text.Split(' ');
它工作正常,但我不知道从哪里开始寻找对,输出应该是这样的:
spring:6 个组合对 (0,2)(0,3)(0,4)(2,4)(3,4) 和 2 个相邻对 (2,3)(3,4 )
所以简而言之,它必须打印出这个词,然后打印出所有与它相同的其他词的位置,然后继续下一个词并打印其余词相对于新词的位置,我试过将每个单词添加到字典中,将它们的索引添加到另一个字典中,并将它们与原始数组进行比较并获取索引,但我感到很困惑,我不知道该做什么或从哪里开始,有任何建议或可能是研究方向?我不想要答案,我只想要一个指南(如果可能的话)?
最佳答案
这应该做到......
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApp1
{
class Program
{
为每个结果项定义一个容器...
class IndexPair
{
public int Index1 { get; set; }
public int Index2 { get; set; }
}
好吧,让我们这样做......
static void Main(string[] args)
{
声明我们要测试的字符串和一些结果集来存储结果......
var testString = "spring java spring spring spring javescript java jboss jboss tomcat jboss";
var test = testString.Split(' ');
var pairs = new List<IndexPair>();
var comboPairs = new List<IndexPair>();
遍历源数组(变量“test”)并提出适当的问题......
for (int i = 0; i < test.Length; i++)
for (int j = 0; j < test.Length; j++)
if (j > i && test[i] == test[j])
{
var pair = new IndexPair { Index1 = i, Index2 = j };
pairs.Add(pair);
if (j == (i + 1)) comboPairs.Add(pair);
}
输出结果...
Console.WriteLine("Input string: " + testString);
Console.WriteLine("Word pairs: " + string.Join(" ", pairs.Select(p => $"{p.Index1},{p.Index2}")));
Console.WriteLine("Combo pairs: " + string.Join(" ", comboPairs.Select(p => $"{p.Index1},{p.Index2}")));
Console.ReadKey();
}
}
}
... 似乎至少给出了预期的输出(尽管问题并没有在所有比赛中得到很好的解决)。
希望如果您的理解正确,您应该已经意识到这个答案中的所有代码组合在一起是一个完整的控制台应用程序,它将在运行时实现您想要的。
关于c# - 获取单词对在一串单词中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47095964/