检查数字中的特定数字
Check for specific digits in a number
我想检查数字中的某些数字,并根据结果打印一条消息。
要检查的数字:7 和 9
输出:如果是 7,打印 S 如果是 9,打印 N(顺序很重要)没有 7 或 9,打印输入数字。
例如:
输入number:75输出:S(包含7)
输入number:96输出:N(包含9)
输入number:79输出:SN
输入number:97输出:NS
输入number:67849输出:SN
输入number:59587输出:NS
输入number:873579输出:SSN
输入number: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)
如果它有多个数字则不起作用(for ex:769,957)
如何实现(顺序很重要)。
提前致谢
您可以将您的数字转换为字符串,然后进行迭代,当您找到 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";
}
更简单的方法是先将数字转换为字符串。
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 而不是字符串来提高性能。如果你愿意,你可以传递 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解法,他也得敬弦
你可以使用下面的解决方案,如果你想要七和九而不是 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());
}
using System;
using System.Linq;
namespace Demo
{
class Program
{
static void Main()
{
Console.WriteLine(demo(75));
Console.WriteLine(demo(96));
Console.WriteLine(demo(79));
Console.WriteLine(demo(97));
Console.WriteLine(demo(67849));
Console.WriteLine(demo(59587));
Console.WriteLine(demo(873579));
Console.WriteLine(demo(135));
}
static string demo(int number)
{
string result = new string(
number.ToString().Where(digit => digit == '7' || digit == '9')
.Select(digit => (digit == '7') ? 'S' : 'N' )
.ToArray());
return result.Length > 0 ? result : number.ToString();
}
}
}
备选方案 #1:
static readonly string[] lookup = {"", "", "", "", "", "", "", "S", "", "N"};
static string demo(int number)
{
string txt = number.ToString();
string result = string.Concat(txt.Select(digit => lookup[digit-'0']));
return result.Length > 0 ? result : txt;
}
备选方案 #2:
static string demo(int number)
{
string txt = number.ToString();
string result = string.Concat(txt.Select(digit => " S N"[digit-'0'])).Replace(" ", "");
return result.Length > 0 ? result : txt;
}
备选方案 #3(技术上 "one-liner" 但我将其拆分)
static string demo(int number)
{
return new string(
number.ToString()
.Select(digit => "0123456S8N"[digit - '0'])
.GroupBy(digit => digit == 'S' || digit == 'N')
.OrderBy(g => g.Key)
.Last()
.ToArray());
}
我会先转换为字符串,因此不需要数学计算,它会保留顺序。
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"
使用:
output = "S" + output; // or "N"
我想检查数字中的某些数字,并根据结果打印一条消息。
要检查的数字:7 和 9 输出:如果是 7,打印 S 如果是 9,打印 N(顺序很重要)没有 7 或 9,打印输入数字。
例如:
输入number:75输出:S(包含7)
输入number:96输出:N(包含9)
输入number:79输出:SN
输入number:97输出:NS
输入number:67849输出:SN
输入number:59587输出:NS
输入number:873579输出:SSN
输入number: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)
如果它有多个数字则不起作用(for ex:769,957)
如何实现(顺序很重要)。
提前致谢
您可以将您的数字转换为字符串,然后进行迭代,当您找到 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";
}
更简单的方法是先将数字转换为字符串。
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 而不是字符串来提高性能。如果你愿意,你可以传递 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解法,他也得敬弦
你可以使用下面的解决方案,如果你想要七和九而不是 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());
}
using System;
using System.Linq;
namespace Demo
{
class Program
{
static void Main()
{
Console.WriteLine(demo(75));
Console.WriteLine(demo(96));
Console.WriteLine(demo(79));
Console.WriteLine(demo(97));
Console.WriteLine(demo(67849));
Console.WriteLine(demo(59587));
Console.WriteLine(demo(873579));
Console.WriteLine(demo(135));
}
static string demo(int number)
{
string result = new string(
number.ToString().Where(digit => digit == '7' || digit == '9')
.Select(digit => (digit == '7') ? 'S' : 'N' )
.ToArray());
return result.Length > 0 ? result : number.ToString();
}
}
}
备选方案 #1:
static readonly string[] lookup = {"", "", "", "", "", "", "", "S", "", "N"};
static string demo(int number)
{
string txt = number.ToString();
string result = string.Concat(txt.Select(digit => lookup[digit-'0']));
return result.Length > 0 ? result : txt;
}
备选方案 #2:
static string demo(int number)
{
string txt = number.ToString();
string result = string.Concat(txt.Select(digit => " S N"[digit-'0'])).Replace(" ", "");
return result.Length > 0 ? result : txt;
}
备选方案 #3(技术上 "one-liner" 但我将其拆分)
static string demo(int number)
{
return new string(
number.ToString()
.Select(digit => "0123456S8N"[digit - '0'])
.GroupBy(digit => digit == 'S' || digit == 'N')
.OrderBy(g => g.Key)
.Last()
.ToArray());
}
我会先转换为字符串,因此不需要数学计算,它会保留顺序。
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"
使用:
output = "S" + output; // or "N"