C# 如何检查字符串中的3个连续字母?
我的程序需要检查字符串中的3个连续字母(并检查整个字符串)。我可以用加密的方式检查它们,比如“检查qwe”、“检查wer”、“检查ert”,但这看起来很混乱,做得很糟糕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++)
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();
}
}