C# 如何检查字符串中的3个连续字母?

C# 如何检查字符串中的3个连续字母?,c#,string,loops,C#,String,Loops,我的程序需要检查字符串中的3个连续字母(并检查整个字符串)。我可以用加密的方式检查它们,比如“检查qwe”、“检查wer”、“检查ert”,但这看起来很混乱,做得很糟糕 static void Main(string[] args) { string BadLetters = "qwertyuiopasdfghjklzxcvbnm"; string password = "Blablauio"; for (int i = 1; i <= 30; i++)

我的程序需要检查字符串中的3个连续字母(并检查整个字符串)。我可以用加密的方式检查它们,比如“检查qwe”、“检查wer”、“检查ert”,但这看起来很混乱,做得很糟糕

static void Main(string[] args)
{
    string BadLetters = "qwertyuiopasdfghjklzxcvbnm";
    string password = "Blablauio"; 

    for (int i = 1; i <= 30; i++)
    {
        // This checks if it contains "qwe" but i want it to 
        // cycle through the rest (such as "wer" or "rty")
        if (password.Contains(BadLetters.Substring(0, 3)))             {
            Console.WriteLine("password contains 3 consequtive letters in BadLetters");                    
        }
    }

    Console.ReadKey();
}
static void Main(字符串[]args)
{
字符串BadLetters=“qwertyuiopasdfghjklzxcvnm”;
字符串password=“Blablauio”;

对于(inti=1;i也许您可以尝试编辑您的字符串,这样3个字母就消失了,然后您对下一个字母执行与之前相同的操作

或者您可以添加到2个变量
firstletter
secondletter
4中,这样它也会跳过前3个变量,并与以下变量重复


Sry我理解您的字符串为连续3…

如果您改为循环使用密码变量会更好,如下所示:

    string badLetters = "qwertyuiopasdfghjklzxcvbnm";
    string password = "Blablauio"; 
    for (int i = 0; i < password.Length-2; i++)
    {
        if (badLetters.Contains(password.Substring(i,3))) 
        {
            Console.WriteLine("password contains 3 consequtive letters in BadLetters");
        }
    }
string badLetters=“qwertyuiopasdfghjklzxcvnm”;
字符串password=“Blablauio”;
for(int i=0;i
显然,您还必须检查密码是否至少包含3个字符。
此循环可能会在键盘行交叉字母(即“opa”或“pas”)上失败,这些字母应被视为正确的值,因此您可以改为:

string badLettersR1 = "qwertyuiop";
string badLettersR2 = "asdfghjkl";
string badLettersR3 = "zxcvbnm";
string password = "Blablauio"; 
for (int i = 0; i < password.Length-2; i++)
{
    if (badLettersR1.Contains(password.Substring(i,3)) ||
        badLettersR2.Contains(password.Substring(i,3)) ||
        badLettersR3.Contains(password.Substring(i,3))) 
    {
        Console.WriteLine("password contains 3 consequtive letters in BadLetters");
    }
}
string badLettersR1=“qwertyuiop”;
字符串badLettersR2=“asdfghjkl”;
字符串badLettersR3=“zxcvbnm”;
字符串password=“Blablauio”;
for(int i=0;i
您需要遍历
password
中的每个字符,在
BadLetters
中查找其索引,并检查
password
中的下两个字符是否与
BadLetters
中的下两个字符匹配。我还更改了循环
的停止条件,因为您只需要遍历前后结果imate在
密码中输入字符

string BadLetters = "qwertyuiopasdfghjklzxcvbnm";
string password = "Blablauio";
for (int i = 0; i < password.Length - 2; i++)
{
    var j = BadLetters.IndexOf(password[i]);
    if (j > -1 && j + 2 < BadLetters.Length &&
        password[i + 1] == BadLetters[j + 1] &&
        password[i + 2] == BadLetters[j + 2])
    {
        Console.WriteLine("password contains 3 consequtive letters in BadLetters");
    }
}
string BadLetters=“qwertyuiopasdfghjklzxcvnm”;
字符串password=“Blablauio”;
for(inti=0;i-1&&j+2<坏字母长度&&
密码[i+1]==坏字母[j+1]&&
密码[i+2]==坏字母[j+2])
{
Console.WriteLine(“密码包含3个大写字母”);
}
}
TL;DR 您只需浏览符号数组并比较其索引,如下所示:

您可以只计算后续字母的个数,当计数超过3个时发出警报

我提供了键盘上所有行的详细代码。您可以在不修改代码的情况下添加其他行(即大写)

您还可以控制
N
-字符串中禁止的后续字符数

还有一种检查方法,仅用于演示工作结果:

q - ok
qw - ok
qwe - password contains 3 consequtive letters in BadLetters
abdfsk - ok
ehjk - password contains 3 consequtive letters in BadLetters
bnm - password contains 3 consequtive letters in BadLetters
代码 .net fiddle上的代码:

public static String[]KeyboardLines=new[]{
"1234567890", 
“qwertyuiop[]”,
“asdfghjkl;”\“,
“`zxcvbnm,./”
};
公共静态Int32 GetLine(字符c){
对于(int i=0;i-1){
返回i;
};
}
返回-1;
}
公共静态bool hasconsequenceletter(字符串str,int n=3){
如果(str.Length
改进
如果
GetLine
函数将返回带有行号的字符索引,然后不仅比较字符,还比较对(LetterLine,LetterIndex),则可以改进这种方法。但这需要我们使用元组或类,但我认为您并不真的需要这样做。

我发现的简单方法是

using System;

public class Program
{
    public static void Main()
    {
        string BadLetters = "qwertyuiopasdfghjklzxcvbnm";
        string password = "Blablauio";
        Console.WriteLine(password.IndexOf(BadLetters.Substring(0,3))>=0?"Present":"Not Present");
        Console.ReadLine();
    }
}

您可能需要检查两个字符串的空条件

什么是
第一个字母
第二个字母
?很抱歉,它们应该声明为0和3,假设它们说0和3,我希望它循环到1和4,2和5,等等。因此它检查stringProposal的各个部分:循环而
i
,以及使用
password.Contains(BadLetters.Substring(i,3))检查
using System;

public class Program
{
    public static void Main()
    {
        string BadLetters = "qwertyuiopasdfghjklzxcvbnm";
        string password = "Blablauio";
        Console.WriteLine(password.IndexOf(BadLetters.Substring(0,3))>=0?"Present":"Not Present");
        Console.ReadLine();
    }
}