C# 获取单词对在字符串中的位置
我有一连串的话:C# 获取单词对在字符串中的位置,c#,string,delimiter,C#,String,Delimiter,我有一连串的话: 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 = tex
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(' ');
它工作正常,但我不知道从哪里开始查找配对,输出应该是这样的:
弹簧:6对组合(0,2)(0,3)(0,4)(2,4)(3,4)和2对(2,3)(3,4)旁边
简言之,它必须打印出单词,然后打印出所有其他单词的位置,这些单词与它的位置相同,然后继续打印下一个单词,打印出其余单词与新词的位置,我试着将每个单词添加到一个字典中,并将它们的索引添加到另一个字典中,然后从原始数组中比较它们并获得索引,但我太困惑了,我不知道该做什么,也不知道从哪里开始,有什么建议,或者可以研究的方向吗?我不想要答案,如果可能的话,我只想要一个指南?我想你从一系列单词开始 您应该跟踪已处理的单词,例如,将它们添加到
哈希集中。前后迭代数组,对于每个尚未处理的字,开始处理:
- 创建所有单词索引的列表。例如,单词
spring
将具有索引
0,2,3,4
- 将每个索引与以下索引组合成一对:
(0,2)、(0,3)、(0,4)、(2,3)、(2,4)、(3,4)
- 通过检查索引差异是否为
1
(2,3)、(3,4)
(0,2)、(0,3)、(0,4)、(2,4)
注意:我不知道您为什么在问题中将(3,4)
列为组合对,据我所知,它应该是一个相邻的组合对。如果我误解了,请澄清这个问题。有很多复杂的方法,最容易理解的方法是:
string[] words = text.Split(' ');
for(int i=0; i<words.Length; i++){
for(int j=i+1; j<words.length; j++){
if(words[i] == words[j]){
//You have a match, do your stuff here!
}
}
}
string[]words=text.Split(“”);
对于(inti=0;i这应该可以
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>();
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();
}
}
}
…似乎至少给出了预期的输出(尽管问题并没有在所有比赛中都得到回答)
希望如果你遵循了这一点,你应该意识到这个答案中的所有代码都是一个完整的控制台应用程序,在运行时可以实现你想要的功能。这就是你提供的确切输出吗?我说,要清除它,请在代码块中以字符串形式添加确切的输出,如expectedOutput=“…”
组合对是什么:(2,3)?对于组合对,数组中的每个元素都希望找到匹配的索引。对于next to PAIRES,数组中的每个元素都看下一个元素是否相同。@Mong Zhu,似乎我忘记了那个元素。@Adam但是我如何获得输出中每个单词的位置,这是我的主要问题。它起作用了,我只需要组合输出,以便它会打印特定单词的结果,而不是打印特定单词对的结果,但它确实会给我所需的输出你是说你想要带索引的单词吗?
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();
}
}
}