স্ট্রিংয়ে কেবলমাত্র সংখ্যা রয়েছে কিনা তা পরীক্ষা করার দ্রুততম উপায়


178

আমি এটি পরীক্ষা করার কয়েকটি উপায় জানি। Regex, int.parse, tryparse, লুপিং।

চেক করার দ্রুততম উপায় কী কেউ আমাকে বলতে পারেন?

প্রয়োজন শুধুমাত্র হয় চেক কোন প্রয়োজন আসলে বিশ্লেষণ করতে।

এটি একই প্রশ্ন নয়: একটি স্ট্রিং সংখ্যা হলে আমি কীভাবে সনাক্ত করব?

প্রশ্নটি কীভাবে চিহ্নিত করা যায় তা নয়। তবে দ্রুততম পদ্ধতি কী about


2
W / O শুধু পরিমাপ আমি int.tryparse হবে
কেনি

সম্ভবত অ্যাসেমব্লিতে লেখা একটি লুপ যা দেশী-শব্দ-আকারের তথ্যগুলি স্ট্রিং থেকে একটি রেজিস্টারে রূপান্তরিত করে এবং তারপরে নিবন্ধের প্রতিটি বাইটে একটি পরিসীমা-পরীক্ষা করে।
অ্যারোথ

35
সহজভাবেreturn str.All(Char.IsDigit);
মহসেন

2
int.TryParse স্ট্রিংয়ে কেবল অঙ্ক থাকে কিনা তা পরীক্ষা করে না! "-13" (মাইনাস এবং স্পেস সহ) এর মতো স্ট্রিংগুলি সফলভাবে পার্স করা হবে।
আলিউশ

উত্তর:


261
bool IsDigitsOnly(string str)
{
    foreach (char c in str)
    {
        if (c < '0' || c > '9')
            return false;
    }

    return true;
}

এটি করার সম্ভবত দ্রুততম উপায় হবে।


16
এছাড়াও রয়েছেchar.IsDigit()
কিথ

30
@ কিথ আরও তিন শতাধিক চরিত্রের জন্য IsDigitফিরে আসে true। সম্পূর্ণ প্রস্থের দশমিক অঙ্ক সহ 0123... (চীন এবং জাপানে সাধারণ) এবং অন্যান্য সংস্কৃতিগুলির অঙ্কগুলি যেমন ০১২௧௨௩௪꘤꘥꘦꘧꘨এবং আরও প্রচুর।
CodeInChaos

62
যদি কেউ চিন্তা করে তবে এটিকে অবশ্যই ওয়ান-লাইনারে return str.All(c => c >= '0' && c <= '9');
নামিয়ে দেওয়া

18
আপনি কেবল খুব এই কাজ করতে পারে: return str.All(char.IsDigit);। পদ্ধতি গ্রুপের জন্য হুর!
আইসমানিন্ড

11
দয়া করে মনে রাখবেন যে খালি স্ট্রিংটি ভয়েল নম্বর নয়।
ড্যানন

64

একই স্ট্রিংয়ের 1000000 পার্সের উপর ভিত্তি করে এখানে কিছু মানদণ্ড রয়েছে:

releaseপরিসংখ্যানগুলির জন্য আপডেট করা :

IsDigitsOnly: 384588
TryParse:     639583
Regex:        1329571

এখানে কোডটি দেখে মনে হচ্ছে ইসডিজিটগুলি কেবলমাত্র দ্রুত:

class Program
{
    private static Regex regex = new Regex("^[0-9]+$", RegexOptions.Compiled);

    static void Main(string[] args)
    {
        Stopwatch watch = new Stopwatch();
        string test = int.MaxValue.ToString();
        int value;

        watch.Start();
        for(int i=0; i< 1000000; i++)
        {
            int.TryParse(test, out value);
        }
        watch.Stop();
        Console.WriteLine("TryParse: "+watch.ElapsedTicks);

        watch.Reset();
        watch.Start();
        for (int i = 0; i < 1000000; i++)
        {
            IsDigitsOnly(test);
        }
        watch.Stop();
        Console.WriteLine("IsDigitsOnly: " + watch.ElapsedTicks);

        watch.Reset();
        watch.Start();
        for (int i = 0; i < 1000000; i++)
        {
            regex.IsMatch(test);
        }
        watch.Stop();
        Console.WriteLine("Regex: " + watch.ElapsedTicks);

        Console.ReadLine();
    }

    static bool IsDigitsOnly(string str)
    {
        foreach (char c in str)
        {
            if (c < '0' || c > '9')
                return false;
        }

        return true;
    }
}

অবশ্যই এটি লক্ষনীয় যে ট্রাইপার্সে সাদা / স্থানের পাশাপাশি সংস্কৃতি নির্দিষ্ট প্রতীকগুলিকে অনুমতি দেয় না। এটি স্ট্রিংয়ের দৈর্ঘ্যেও সীমাবদ্ধ।


সংখ্যার পার্স করা অবশ্যই প্রতিটি অঙ্কের পরীক্ষার চেয়ে বেশি সময় নেয়, কারণ আপনি বেস রূপান্তর করছেন performing

1
একই স্ট্রিং এর 1000 পার্স প্রায় গ্রহণ করা উচিত কোন সব সময়ে সময়, উপায় দ্বারা, ভাল সময় যেখানে প্রাকৃতিক গোলমাল উপস্থাপনা ফলাফল তুচ্ছ করেন। আমি দরকারী সময় পেতে এটি একটি মিলিয়ন বার পার্স করতে হবে আশা করি ।
জন স্কিটি

কারণ Downvoted বেঞ্চমার্ক পথ খুব ছোট দরকারী হতে এবং আপনি স্পট না যে আপনার পদ্ধতি এমনকি নমুনা তুমি পরীক্ষার জন্য ভুল উত্তর প্রদান করা হয়। নমুনা স্ট্রিং হয় শুধুমাত্র সংখ্যা গঠিত, কিন্তু এটি অত্যন্ত দীর্ঘ একটি জন্য কারণ int, TryParse মিথ্যা ফিরে আসছে।
জন স্কিটি

এটি 1 মিটারের সাথে অনেক কাছাকাছি। দৈর্ঘ্য সম্পর্কে আহা ভাল বিষয়, আমি এটি মিস করেছি।
TheCodeKing

3
ওহ, সংকলনে / ও + সহ, এটি এখন ইনট্রির চেয়ে 5 গুণ বেশি দ্রুত। ট্রাইপার্স করুন। শুধু পরীক্ষা করতে, আপনি ডিবাগারটি চালাচ্ছেন না আপনি?
জন স্কিটি

59

আপনি লিনক ব্যবহার করে এটি করতে পারেন

return str.All(char.IsDigit);

  1. .All খালি স্ট্রিংয়ের জন্য সত্য এবং নাল স্ট্রিংগুলির ব্যতিক্রমের জন্য প্রত্যাশা।
  2. char.IsDigit সমস্ত ইউনিকোড অক্ষর জন্য সত্য।

3
char.IsDigit বিভিন্ন লোকেল (দেখুন থেকে অসংখ্য ইউনিকোড ডিজিটের সাথে মেলে fileformat.info/info/unicode/category/Nd/list.htm )। এছাড়াও, আপনার উত্তরটি লিনকিউ ব্যবহার করে তাই এটির দ্রুততম উপায় হওয়ার সম্ভাবনা কম । যদিও বেশিরভাগ ব্যবহারের ক্ষেত্রে এটি পর্যাপ্ত হতে পারে।
স্টিফেন হল্ট

1
@ স্টেফেনহোল্ট হ্যাঁ আপনি ঠিক বলেছেন, আমি বুঝতে পেরেছি যে অগত্যা দ্রুততম নয়, তবে এটি সম্ভবত লেখা সবচেয়ে সহজ।
উদয়

হ্যাঁ, ফর্সা পয়েন্ট। আমি কয়েক বছর আগেও অনুরূপ উত্তর লিখেছিলাম (নীচে দেখুন), যদিও আমার সংস্করণটি পরীক্ষা করা হয়েছে যদি অন্য লোকেলগুলি থেকে চরগুলি নির্মূল করতে চরটি '0' এবং '9 'এর মধ্যে ছিল। এটি সঠিক প্রয়োজনীয়তার উপর নির্ভর করবে।
স্টিফেন হল্ট

34

চরটিতে ইতিমধ্যে একটি ইসডিজিট (চর সি) রয়েছে যা এটি করে:

 public static bool IsDigit(char c)
    {
      if (!char.IsLatin1(c))
        return CharUnicodeInfo.GetUnicodeCategory(c) == UnicodeCategory.DecimalDigitNumber;
      if ((int) c >= 48)
        return (int) c <= 57;
      else
        return false;
    }

আপনি কেবল এটি করতে পারেন:

var theString = "839278";
bool digitsOnly = theString.All(char.IsDigit);

আপনি যদি ইউনিকোড অঙ্কগুলি যাচাই করার জন্য যত্নবান হন তবে আপনার কেবলমাত্র খারাপ কোড এমনকি দ্রুত কোডের জন্য এটির জন্য কোনও চার্ট দেওয়া উচিত হয়নি।
ব্যবহারকারী 823959

1
@ ব্যবহারকারী 823959: আপনি কী বলতে চাইছেন তা সম্পর্কে আমি নিশ্চিত নই। : Char.IsDigit mscorelib অংশ msdn.microsoft.com/en-us/library/0t641e58.aspx
flayn

গেরহার্ড দুঃখিত, আমার ভুল।
ব্যবহারকারী 823959

এটি লুপিংয়ের চেয়ে আরও সংক্ষিপ্ত, তবে আমার মেশিনে, এক মিলিয়নেরও বেশি পুনরাবৃত্তির জন্য, লুপটি সর্বদা 1.5 ডলার দ্বারা দ্রুত হয়
সুধাংশু মিশ্র

23

প্রতি charএবং forতার পরিবর্তে কেবলমাত্র একটি তুলনা ব্যবহার করে প্রায় 20% দ্রুত হতে পারে foreach:

bool isDigits(string s) 
{ 
    if (s == null || s == "") return false; 

    for (int i = 0; i < s.Length; i++) 
        if ((s[i] ^ '0') > 9) 
            return false; 

    return true; 
}

পরীক্ষার জন্য ব্যবহৃত কোড (সর্বদা প্রোফাইল কারণ ফলাফলগুলি হার্ডওয়্যার, সংস্করণ, ক্রম ইত্যাদির উপর নির্ভর করে):

static bool isDigitsFr(string s) { if (s == null || s == "") return false; for (int i = 0; i < s.Length; i++) if (s[i] < '0' || s[i] > '9') return false; return true; }
static bool isDigitsFu(string s) { if (s == null || s == "") return false; for (int i = 0; i < s.Length; i++) if ((uint)(s[i] - '0') > 9) return false; return true; }
static bool isDigitsFx(string s) { if (s == null || s == "") return false; for (int i = 0; i < s.Length; i++) if ((s[i] ^ '0') > 9) return false; return true; }
static bool isDigitsEr(string s) { if (s == null || s == "") return false; foreach (char c in s) if (c < '0' || c > '9') return false; return true; }
static bool isDigitsEu(string s) { if (s == null || s == "") return false; foreach (char c in s) if ((uint)(c - '0') > 9) return false; return true; }
static bool isDigitsEx(string s) { if (s == null || s == "") return false; foreach (char c in s) if ((c ^ '0') > 9) return false; return true; }
static void test()
{
    var w = new Stopwatch(); bool b; var s = int.MaxValue + ""; int r = 12345678*2; var ss = new SortedSet<string>(); //s = string.Concat(Enumerable.Range(0, 127).Select(i => ((char)i ^ '0') < 10 ? 1 : 0));
    w.Restart(); for (int i = 0; i < r; i++) b = s.All(char.IsDigit); w.Stop(); ss.Add(w.Elapsed + ".All .IsDigit"); 
    w.Restart(); for (int i = 0; i < r; i++) b = s.All(c => c >= '0' && c <= '9'); w.Stop(); ss.Add(w.Elapsed + ".All <>"); 
    w.Restart(); for (int i = 0; i < r; i++) b = s.All(c => (c ^ '0') < 10); w.Stop(); ss.Add(w.Elapsed + " .All ^"); 
    w.Restart(); for (int i = 0; i < r; i++) b = isDigitsFr(s); w.Stop(); ss.Add(w.Elapsed + " for     <>");
    w.Restart(); for (int i = 0; i < r; i++) b = isDigitsFu(s); w.Stop(); ss.Add(w.Elapsed + " for     -");
    w.Restart(); for (int i = 0; i < r; i++) b = isDigitsFx(s); w.Stop(); ss.Add(w.Elapsed + " for     ^");
    w.Restart(); for (int i = 0; i < r; i++) b = isDigitsEr(s); w.Stop(); ss.Add(w.Elapsed + " foreach <>");
    w.Restart(); for (int i = 0; i < r; i++) b = isDigitsEu(s); w.Stop(); ss.Add(w.Elapsed + " foreach -");
    w.Restart(); for (int i = 0; i < r; i++) b = isDigitsEx(s); w.Stop(); ss.Add(w.Elapsed + " foreach ^");
    MessageBox.Show(string.Join("\n", ss)); return;
}

ইন্টেল i5-3470 @ 3.2GHz, VS 2015 এ ফলাফল। নেট 4.6.1 রিলিজ মোড এবং অপ্টিমাইজেশান সক্ষম হয়েছে:

time    method          ratio
0.7776  for     ^       1.0000 
0.7984  foreach -       1.0268 
0.8066  foreach ^       1.0372 
0.8940  for     -       1.1497 
0.8976  for     <>      1.1543 
0.9456  foreach <>      1.2160 
4.4559  .All <>         5.7303 
4.7791  .All ^          6.1458 
4.8539  .All. IsDigit   6.2421 

সংক্ষিপ্ত পদ্ধতিগুলি ব্যবহার করার জন্য যে কেউ প্রলোভিত হয়েছে, সেটিকে লক্ষ্য করুন


14

আপনার সম্পর্কে কর্মক্ষমতা, ব্যবহার তন্ন তন্ন অবগত থাকলে int.TryParseকিংবা Regex- আপনার নিজের (সাধারণ) ফাংশন লিখন ( DigitsOnlyবা DigitsOnly2নিচে, কিন্তু না DigitsOnly3 - LINQ উল্লেখযোগ্য ওভারহেড বহন বলে মনে হয়)।

এছাড়াও, সচেতন হন যে int.TryParseস্ট্রিংটি "ফিট" করার জন্য খুব দীর্ঘ হলে ব্যর্থ হবে int

এই সাধারণ মানদণ্ড ...

class Program {

    static bool DigitsOnly(string s) {
        int len = s.Length;
        for (int i = 0; i < len; ++i) {
            char c = s[i];
            if (c < '0' || c > '9')
                return false;
        }
        return true;
    }

    static bool DigitsOnly2(string s) {
        foreach (char c in s) {
            if (c < '0' || c > '9')
                return false;
        }
        return true;
    }

    static bool DigitsOnly3(string s) {
        return s.All(c => c >= '0' && c <= '9');
    }

    static void Main(string[] args) {

        const string s1 = "916734184";
        const string s2 = "916734a84";

        const int iterations = 1000000;
        var sw = new Stopwatch();

        sw.Restart();
        for (int i = 0 ; i < iterations; ++i) {
            bool success = DigitsOnly(s1);
            bool failure = DigitsOnly(s2);
        }
        sw.Stop();
        Console.WriteLine(string.Format("DigitsOnly: {0}", sw.Elapsed));

        sw.Restart();
        for (int i = 0; i < iterations; ++i) {
            bool success = DigitsOnly2(s1);
            bool failure = DigitsOnly2(s2);
        }
        sw.Stop();
        Console.WriteLine(string.Format("DigitsOnly2: {0}", sw.Elapsed));

        sw.Restart();
        for (int i = 0; i < iterations; ++i) {
            bool success = DigitsOnly3(s1);
            bool failure = DigitsOnly3(s2);
        }
        sw.Stop();
        Console.WriteLine(string.Format("DigitsOnly3: {0}", sw.Elapsed));

        sw.Restart();
        for (int i = 0; i < iterations; ++i) {
            int dummy;
            bool success = int.TryParse(s1, out dummy);
            bool failure = int.TryParse(s2, out dummy);
        }
        sw.Stop();
        Console.WriteLine(string.Format("int.TryParse: {0}", sw.Elapsed));

        sw.Restart();
        var regex = new Regex("^[0-9]+$", RegexOptions.Compiled);
        for (int i = 0; i < iterations; ++i) {
            bool success = regex.IsMatch(s1);
            bool failure = regex.IsMatch(s2);
        }
        sw.Stop();
        Console.WriteLine(string.Format("Regex.IsMatch: {0}", sw.Elapsed));

    }

}

... নিম্নলিখিত ফলাফল উত্পাদন করে ...

DigitsOnly: 00:00:00.0346094
DigitsOnly2: 00:00:00.0365220
DigitsOnly3: 00:00:00.2669425
int.TryParse: 00:00:00.3405548
Regex.IsMatch: 00:00:00.7017648

11

খালি বৈধতা সহ ফাংশন:

public static bool IsDigitsOnly(string str)
  {             
        return !string.IsNullOrEmpty(str) && str.All(char.IsDigit);
  }

10

আমি লিনক পছন্দ করি এবং এটি প্রথম আবিষ্কার করতে না পারার জন্য আপনি এটি করতে পারেন

string str = '0129834X33';
bool isAllDigits = !str.Any( ch=> ch < '0' || ch > '9' );

8

সম্ভবত সবচেয়ে দ্রুততম উপায়:

myString.All(c => char.IsDigit(c))

দ্রষ্টব্য: আপনার স্ট্রিংটি খালি থাকলে সেই ক্ষেত্রে এটি সত্য হবে (যদি আপনি খালিটিকে বৈধ সংখ্যা / সংখ্যা হিসাবে বিবেচনা না করেন)


7

এই কাজ করা উচিত:

Regex.IsMatch("124", "^[0-9]+$", RegexOptions.Compiled)

int.Parseবা int.TryParseসর্বদা কাজ করবে না, কারণ স্ট্রিংটিতে আরও সংখ্যক সংখ্যক থাকতে পারে যা কোনও পূর্বরূপ ধারণ করতে পারে।

আপনি যদি এই চেকটি একবারের চেয়েও বেশি বেশি করতে চলেছেন তবে কোনও সংকলিত রেজেক্স ব্যবহার করা কার্যকর - এটি প্রথমবারের জন্য আরও বেশি সময় নেয়, তবে তারপরে আরও দ্রুত।


3
এটি ভুল, এটি যদি এক অঙ্কেরও থাকে তবে এটি সত্য হয়। যদিও অনুপযুক্ত ধারণাটি দুর্দান্ত।
নাহুম

1
এটি এখন পর্যন্ত সবচেয়ে ধীর পদ্ধতি, তবে স্ট্রিংয়ের অজানা আকারের ভিত্তিতে সেরা সমাধান। উল্লিখিত হিসাবে রেজেক্স এছাড়াও একটি ত্বক প্রয়োজন।
TheCodeKing

6

আপনি এটি এক লাইনের লিনকিউ বিবৃতিতে করতে পারেন। ঠিক আছে, আমি বুঝতে পারি এটি অগত্যা দ্রুত নয়, সুতরাং প্রযুক্তিগতভাবে প্রশ্নের উত্তর দেয় না, তবে সম্ভবত এটি লেখা সবচেয়ে সহজ:

str.All(c => c >= '0' && c <= '9')

4
str.All(char.IsDigit)লিখতে আরও সহজ, তবে অবশ্যই আপনার কোডের সমতুল্য নয়।
কোডসইনচাউস

আমি এটি পরীক্ষা করার চেষ্টা করেছি: পেস্টবিন .com/পিউউবিপি 9 এন 1 মুক্তির সময় অবশ্যই কোনও ডিবাগার অবশ্যই নেই ... এবং এটি WAYYYY দ্রুত বলে মনে হচ্ছে। @ জোন স্কিটি আপনি কি কিছু অন্তর্দৃষ্টি দিতে পারেন? str.All (c => c> = '0' && c <= '9') ইজডিজিটের চেয়ে ওয়ে ওয়ে মনে হচ্ছে
নাহুম

1
@ নাহুমলিটভিন IsDigitইউনিকোড সমর্থন করে। সুতরাং এটি প্রয়োগ করার সময় মাইক্রোসফ্ট কোন টাইম-মেমরি ট্রেড-অফগুলি বেছে নিয়েছে তার উপর নির্ভর করে চেকটি ব্যয়বহুল হতে পারে। আমি ধরে নিলাম যে এটি স্থানীয় কোডে ফরোয়ার্ড করে, সেই রূপান্তরটি বেশ ব্যয়বহুলও হতে পারে।
CodeInChaos

@ কোডস ইনচাউস যখন আপনি বলেছিলেন যে এটি "আমার কোডের সমতুল্য নয়" আমি অন্য কোনটির মিল মেলে তা পরীক্ষা করতে গিয়েছিলাম এবং এটি দেখা গেছে যে অন্যান্য লোকেলের (যেমন আরবি) অঙ্কগুলি আপনার সংস্করণে মিলবে match আমি অনুমান করি যে এটি এমন কোনও বিষয় যা ওপিকে বিবেচনা করা উচিত, এই জাতীয় সংখ্যাগুলি বৈধ কিনা। Int.TryParse করার সময়, আমি মনে করি যে এই জাতীয় অক্ষরযুক্ত স্ট্রিং গ্রহণ করবে না।
স্টিফেন হল্ট

লিনকিউ হ'ল কিছু সম্পাদন করার সবচেয়ে ধীরতম উপায়। আপনি কোডিংয়ে একটি কম্বল বিধি প্রয়োগ করতে চাইলে, উচ্চতর স্তরের এবং কার্যকারিতা হিসাবে যে কোনও কিছু প্রস্তাব দেয় তা ধরে নিন it
ট্র্যাভিসো

3

এটি সম্ভবত খুব দেরিতে আসছে !, তবে আমি নিশ্চিত যে এটি কারওর পক্ষে সহায়তা করবে, যেমন এটি আমাকে সহায়তা করেছিল।

        private static bool IsDigitsOnly(string str)
        {
            return str.All(c => c >= '0' && c <= '9');
        }

1

আপনি .IsMatch(string input, string pattern)সি # তে পদ্ধতিটি ব্যবহার করে কেবলমাত্র অঙ্ক (0-9) থাকতে ইনপুট স্ট্রিংটি পরীক্ষা করে নিয়মিত এক্সপ্রেশন ব্যবহার করার চেষ্টা করতে পারেন ।

using System;
using System.Text.RegularExpression;

public namespace MyNS
{
    public class MyClass
    {
        public void static Main(string[] args)
        {
             string input = Console.ReadLine();
             bool containsNumber = ContainsOnlyDigits(input);
        }

        private bool ContainOnlyDigits (string input)
        {
            bool containsNumbers = true;
            if (!Regex.IsMatch(input, @"/d"))
            {
                containsNumbers = false;
            }
            return containsNumbers;
        }
    }
}

শুভেচ্ছা সহ


3
হাই জেসন এবং স্ট্যাকওভারফ্লোতে স্বাগতম। উত্তর দেওয়ার জন্য আপনাকে ধন্যবাদ তবে লক্ষ্য করুন যে প্রশ্নটি সবচেয়ে দ্রুততম উপায় সম্পর্কে ছিল। নিয়মিত প্রকাশগুলি তুলনামূলকভাবে ধীর হয় যা অন্যান্য উত্তরে আলোচনা করা হয়েছিল।
নাহুম

1

এটি নিখুঁতভাবে কাজ করবে, অন্যান্য অনেক উপায় আছে তবে এটি কাজ করবে

bool IsDigitsOnly(string str)
    {
        if (str.Length > 0)//if contains characters
        {
            foreach (char c in str)//assign character to c
            {
                if (c < '0' || c > '9')//check if its outside digit range
                    return false;
            }
        }else//empty string
        {
            return false;//empty string 
        }

        return true;//only digits
    }

0

এই কোড ব্যবহার করে দেখুন:

bool isDigitsOnly(string str)
{
   try
   {
      int number = Convert.ToInt32(str);
      return true;
   }
   catch (Exception)
   {
      return false;
   }
}

আপনি কি ব্যাখ্যা করতে পারেন যে ইতিমধ্যে সরবরাহ করাগুলির চেয়ে আপনার সমাধান কেন ভাল?
নোয়েল ওয়াইডার

কারণ এই কোডটি চালনার সময় ক্রম [ও (1)] অন্যের তুলনায় কম [ও (এন)]
এইচ। বোর্সিপুর

আমি খুব অবাক হব যদি Convert.ToInt32ও (এন) এর চেয়ে দ্রুত চালিত হয়। এই অনুমানকে সমর্থন করার কোনও প্রমাণ কি আপনার আছে?
বিডিএল

1
এটি দ্রুততর হতে পারে যদি স্ট্রিং আসলে একটি সংখ্যা হয় তবে এক্সপিশনের ক্ষেত্রে এটি সম্ভবত ধীর হয়। এছাড়াও এটি প্রশ্নের উত্তর দিচ্ছে না কারণ int -MaxValue এর চেয়ে বড় সংখ্যা যদি str হয় তবে এটি কাজ করবে না।
টোমর ওলবার্গ

-2
public bool CheckforDigits(string x)
{    
    int tr;  
    return x.All(r=> int.TryParse(r.ToString(), out tr));
}

যদিও এই কোডটি সমস্যার সমাধান করতে পারে, আপনার / কেন এটি কাজ করে তা একটি ব্যাখ্যা যুক্ত করা উচিত। এবং দয়া করে ব্যাখ্যা করুন যে আপনি কেন মনে করেন যে এই কোডটি ইতিমধ্যে সরবরাহ করা আছে তার চেয়ে ভাল।
বিডিএল

1
এছাড়াও: আপনার কোড খালি স্ট্রিংয়ের জন্য সত্য দেয়।
বিডিএল


-3

আপনার স্ট্রিং সনাক্ত করার খুব চতুর এবং সহজ উপায়টিতে কেবল অঙ্ক রয়েছে বা এটি নয়:

string s = "12fg";

if(s.All(char.IsDigit))
{
   return true; // contains only digits
}
else
{
   return false; // contains not only digits
}

যদি শর্তটি অপ্রয়োজনীয়, তবে দুটি রিটার্ন বিবৃতি, আপনি কেবল এস.এলকে ফিরিয়ে দিতে পারবেন ... তবে খালি স্ট্রিং সহ অন্যান্য সমস্যা রয়েছে with
alvarlagerlof
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.