2016-08-22 3 views
3

У меня есть строка, как следовать 51200000000000000000000000000000Вычислить число нулей в строке

Эта строка не фиксируется. Он будет добавлен в зависимости от количества досок. Если есть две платы, строка будет следующей: 5120000000000000000000000000000052200000000000000000000000000000

Я хотел бы знать, как рассчитать количество нулей в строке.

Я использую следующий код, но он не является гибким, если имеется более двух плат.

string str = "51200000000000000000000000000000"; 
string zeros = "00000000000000000000000000000"; 
if (str.Contains(zeros)) 
{ 
    Console.WriteLine("true"); 
} 
else 
{ 
    Console.WriteLine("false"); 
} 
+0

Преобразование строки в массив символов и петли – Prashant

+0

1. перебрать символов строки с простым 'for' 2. Count zeroes – zerkms

+0

@Prashant 'String' имеет индекс для этого уже. – zerkms

ответ

9

Вы можете использовать следующий фрагмент кода, чтобы сделать это, что даст вам количество нулей (Example).

char matchChar='0'; 
string strInput = "51200000000000000000000000000000"; 
int zeroCount = strInput.Count(x => x == matchChar); // will be 29 

Вы можете сделать то же самое, перебором каждого символов и проверить, является ли нужный символ (скажем 0), а затем принять его количество.

+0

Замечание для сообщества: хотя этот ответ технически более краток, дело в том, что другое поощряет алгоритмическое мышление (что «лучше» с точки зрения того, что это умение решать произвольные задачи). – zerkms

+0

Замечание для сообщества: хотя я согласен с @zerkms, я считаю, что с этой точки зрения до логической точки зрения было бы предположить, что писать этот код на ассемблере было бы еще лучше, чтобы поощрять алгоритмическое мышление. ;-) – Enigmativity

+0

@Enigmativity OP не может написать цикл, а проверенный ответ - LINQ. Я вижу огромный разрыв между ответом и требованиями в понимании. Я согласен с тем, что прагматизм должен быть предпочтительнее крайностей, но когда нет базовых навыков, полученных OP, еще немного научить их LINQ (мое мнение). – zerkms

8

Используйте простой foreach цикл для обхода строки и сосчитать:

int CountZeroes(string str) 
{ 
    // TODO: error checking, etc. 
    int count = 0; 
    foreach (var character in str) 
    { 
     if (character == '0') count++; 
    } 

    return count; 
} 
3

немного продвинутый (или так) метод будет конвертировать string в char array затем list of chars затем с помощью LINQ

 string str = "51200000000000000000000000000000"; 

     List<char> nums = str.ToCharArray().ToList(); 

     Console.WriteLine(nums.Where(x => x.Equals('0')).Select(x => x.ToString()).Count()); 

я просто разместил здесь, в случае, если вы хотите узнать не только один подход:)

+0

ура. это будет полезно для меня = D – active92

+0

Вы можете пропустить '.Select (x => x.ToString())' и применять '.Count()' непосредственно после того, где 'nums' также не требуется, так как вы можете применить' где 'to' str' –

+0

действительно, хотя в будущем использование синтаксиса LINQ, безусловно, будет использоваться select. : D также вы можете использовать List , если вы повторяете только числовую строку :) – TheQuestioner

0

Он также может сделать с петлей for и Substring.

Код

string str = "51200000000000000000000000000000"; 
int n = 0; 
for (int i = 0; i < str.Length; i++) 
{ 
    if (str.Substring(i, 1) == "0") 
    n += 1; 
} 
Console.WriteLine("Count : " + n.ToString()); 

Working fiddle demo

0

Код:

string st; 
     st = textBox1.Text; 
     int countch = 0, i; 
     for (i = 0; i < st.Length; i++) 
      if (st[i]=='0') countch++;   
     MessageBox.Show(countch.ToString()); 
Смежные вопросы