C# 检查数字中的特定数字
我想检查数字中的某些数字,并根据结果打印消息 要检查的数字:7和9 输出:如果7,则打印S;如果9,则打印N(订单很重要);如果7或9,则打印输入编号 例如: 输入编号:75输出编号:S(包含7个) 输入编号:96输出编号:N(包含9个) 输入编号:79输出编号:SN 输入编号:97输出编号:NS 输入编号:67849输出编号:SN 输入编号:59587输出编号:NS 输入编号:873579输出编号:SSN 输入编号:135输出编号:135 我尝试了以下方法C# 检查数字中的特定数字,c#,puzzle,C#,Puzzle,我想检查数字中的某些数字,并根据结果打印消息 要检查的数字:7和9 输出:如果7,则打印S;如果9,则打印N(订单很重要);如果7或9,则打印输入编号 例如: 输入编号:75输出编号:S(包含7个) 输入编号:96输出编号:N(包含9个) 输入编号:79输出编号:SN 输入编号:97输出编号:NS 输入编号:67849输出编号:SN 输入编号:59587输出编号:NS 输入编号:873579输出编号:SSN 输入编号:135输出编号:135 我尝试了以下方法 string output = st
string output = string.Empty;
int n = 0;
while(number > 0)
{
n = number % 10;
number = number / 10;
if(n == 7)
{
output += "S";
}
if(n == 9)
{
output += "N";
}
}
return string.IsNullOrEmpty(output) ? number.ToString() : output;
但只有当它包含一个数字时才有效(例如:适用于17,91)
如果它有多个数字(例如:769957),则它不起作用
如何实现这一点(顺序很重要)
提前感谢您可以将数字转换为字符串,然后迭代,当您找到7时,您将打印S和9 N
double myNUmber = 769.957;
string myString = myNUmber.ToString();
string output = string.Empty;
for (int i = 0; i < myString.Length; i++)
{
if (myString[i] == '7')
output += "S";
else if (myString[i] == '9')
output += "N";
}
double myNUmber=769.957;
字符串myString=myNUmber.ToString();
字符串输出=string.Empty;
for(int i=0;i
您可以将数字转换为字符串,然后迭代,当您找到7时,您将打印S和9 N
double myNUmber = 769.957;
string myString = myNUmber.ToString();
string output = string.Empty;
for (int i = 0; i < myString.Length; i++)
{
if (myString[i] == '7')
output += "S";
else if (myString[i] == '9')
output += "N";
}
double myNUmber=769.957;
字符串myString=myNUmber.ToString();
字符串输出=string.Empty;
for(int i=0;i
更简单的方法是先将数字转换为字符串
var numberStr = number.ToString();
var e = numberStr.Select(x => x == '7' ? "S" : x == '9' ? "N" : "");
var output = string.Join("", e);
return string.IsNullOrEmpty(output) ? numberStr : output;
更简单的方法是先将数字转换为字符串
var numberStr = number.ToString();
var e = numberStr.Select(x => x == '7' ? "S" : x == '9' ? "N" : "");
var output = string.Join("", e);
return string.IsNullOrEmpty(output) ? numberStr : output;
我修改了你的方法。还有一点,您应该使用StringBuilder而不是string来提高性能。如果需要,可以传递long代替int
public static string ProcessValidImport(int number)
{
StringBuilder output = new StringBuilder();
int n = number;
while (number > 0)
{
if (number % 10 == 7)
{
output.Append("S");
}
if (number % 10 == 9)
{
output.Append("N");
}
number = number / 10;
}
return (output == null || output.Length == 0 ) ? n.ToString() : Reverse(output.ToString());
}
public static string Reverse(string s)
{
char[] charArray = s.ToCharArray();
Array.Reverse(charArray);
return new string(charArray);
}
我尝试OP解决方案,他也必须尊重弦
如果您想要7和9而不是S和N,您可以使用下面的解决方案
public static string ProcessValidImport(int number)
{
List<string> output = new List<string>();
int n = number;
while (number > 0)
{
if (number % 10 == 7)
{
output.Add("SEVEN");
}
if (number % 10 == 9)
{
output.Add("NINE");
}
number = number / 10;
}
output.Reverse();
return (output == null || output.Count == 0 ) ? n.ToString() : string.Join("", output.ToArray());
}
公共静态字符串ProcessValidImport(整数)
{
列表输出=新列表();
int n=数字;
而(数量>0)
{
如果(数字%10==7)
{
产出。增加(“七”);
}
如果(数字%10==9)
{
产出。增加(“九”);
}
数字=数字/10;
}
output.Reverse();
return(output==null | | output.Count==0)?n.ToString():string.Join(“,output.ToArray());
}
我已经修改了你的方法。还有一点,您应该使用StringBuilder而不是string来提高性能。如果需要,可以传递long代替int
public static string ProcessValidImport(int number)
{
StringBuilder output = new StringBuilder();
int n = number;
while (number > 0)
{
if (number % 10 == 7)
{
output.Append("S");
}
if (number % 10 == 9)
{
output.Append("N");
}
number = number / 10;
}
return (output == null || output.Length == 0 ) ? n.ToString() : Reverse(output.ToString());
}
public static string Reverse(string s)
{
char[] charArray = s.ToCharArray();
Array.Reverse(charArray);
return new string(charArray);
}
我尝试OP解决方案,他也必须尊重弦
如果您想要7和9而不是S和N,您可以使用下面的解决方案
public static string ProcessValidImport(int number)
{
List<string> output = new List<string>();
int n = number;
while (number > 0)
{
if (number % 10 == 7)
{
output.Add("SEVEN");
}
if (number % 10 == 9)
{
output.Add("NINE");
}
number = number / 10;
}
output.Reverse();
return (output == null || output.Count == 0 ) ? n.ToString() : string.Join("", output.ToArray());
}
公共静态字符串ProcessValidImport(整数)
{
列表输出=新列表();
int n=数字;
而(数量>0)
{
如果(数字%10==7)
{
产出。增加(“七”);
}
如果(数字%10==9)
{
产出。增加(“九”);
}
数字=数字/10;
}
output.Reverse();
return(output==null | | output.Count==0)?n.ToString():string.Join(“,output.ToArray());
}
备选方案#1:
备选方案2:
备选方案#3(技术上是“一行”,但我将其拆分)
备选方案#1:
备选方案2:
备选方案#3(技术上是“一行”,但我将其拆分)
我将首先转换为字符串,因此不需要进行数学计算,它将保持顺序
string numberStr = number.ToString();
string result = null; // no need to use StringBuilder, because size won't be big
foreach (char c in numberStr)
{
switch (c)
{
case '7':
result +='S';
break;
case '9':
result +='N';
break;
}
}
return string.IsNullOrEmpty(result) ? numberStr : result;
我将首先转换为字符串,因此不需要进行数学计算,它将保持顺序
string numberStr = number.ToString();
string result = null; // no need to use StringBuilder, because size won't be big
foreach (char c in numberStr)
{
switch (c)
{
case '7':
result +='S';
break;
case '9':
result +='N';
break;
}
}
return string.IsNullOrEmpty(result) ? numberStr : result;
您正在从末尾读取数字,因此生成的字符串是向后的。(
997
给出了SNN
,而它应该给出NNS
)
而不是使用这个:
output += "S"; //or "N"
使用:
您正在从末尾读取数字,因此生成的字符串是向后的。(
997
给出了SNN
,而它应该给出NNS
)
而不是使用这个:
output += "S"; //or "N"
使用:
该拼图标签有明确的注释“请勿使用”。您可能希望使用更好地描述您的问题的东西。如果您只是想得到数字的具体结果,为什么要进行一些计算?除了
135
案例外,程序完全按照您所描述的进行操作,因为number
在方法末尾总是0
,并且输出是反向的()。包括其余的代码并提供一个答案。只需转到答案。这是经典的汽水。你可以通过代码示例(或者只是google FizzBuzz c#)看到很多方法@Noctis提供的所有示例都是用于检查可除性,而不是用于包含数字。感谢拼图标签有明确的注释“请勿使用”。您可能希望使用更好地描述您的问题的东西。如果您只是想得到数字的具体结果,为什么要进行一些计算?除了135
案例外,程序完全按照您所描述的进行操作,因为number
在方法末尾总是0
,并且输出是反向的()。包括其余的代码并提供一个答案。只需转到答案。这是经典的汽水。你可以通过代码示例(或者只是google FizzBuzz c#)看到很多这样做的方法@Noctis所有提供的示例都是为了检查可除性而不是包含数字。谢谢谢谢伊·维韦克,谢谢你的解决方案。但是我的实时解算输出有不止一个字符(七和九)。为了简单起见,我将其写成S和N。因为