C# 检查数字中的特定数字

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

我想检查数字中的某些数字,并根据结果打印消息

要检查的数字: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 = 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。因为