2010-05-24 31 views

Respuesta

16

Aquí es una versión usando LINQ (escrito utilizando métodos de extensión):

int s = str.Where(c => c == 's').Count(); 

Esto utiliza el hecho de que string es IEnumerable<char> , de modo que podamos filtrar todos los caracteres que sean iguales a los que está buscando y luego contar el número de elementos seleccionados. De hecho, se puede escribir sólo por esta (debido a que el método de Count le permite especificar un predicado que se debe mantener durante todos los elementos contados):

int s = str.Count(c => c == 's'); 
+0

me trataron en VS2008 y la cadena no parece ser IEnumerable. ¿Puedes verificarlo? string.ToCharArray() es IEnumerable – josephj1989

+0

@ josephj1989, verifique de nuevo ... http://msdn.microsoft.com/en-us/library/system.string.aspx –

+2

Para que Intellisense le proporcione la extensión LINQ métodos, puede que tenga que convertir la cadena en 'IEnumerable '. – Phong

2
for(int i=0; i < str.Length; i++) { 
    if(str[i] == myChar) { 
     charCount++; 
    } 
} 
3
s.Where(c => c == 's').Count() 

dada s es una cadena y que están buscando 's '

1
 string s = "sasysays "; 
     List<char> list = s.ToList<char>(); 
     numberOfChar = list.Count<char>(c => c=='s'); 
7

Otra opción es:

int numberOfS = str.Count('s'.Equals); 

Esto es un poco hacia atrás - 's' es un char, y cada char tiene un método Equals, que se puede utilizar como argumento para Count.
Por supuesto, esto es menos flexible que c => c == 's' - no se puede cambiar trivialmente a una condición compleja.

+0

+1, bastante inteligente ... –

+1

Definitivamente inteligente, aunque ciertamente menos intuitivo que escribir 'c => c == 's'' (Diría que es más probable que el código cause pausa). – Phong

2

Una solución más general, para contar el número de ocurrencias de todos los personajes:

var charFrequencies = new Dictionary<char, int>(); 
foreach(char c in s) 
{ 
    int n; 
    charFrequencies.TryGetValue(c, out n); 
    n++; 
    charFrequencies[c] = n; 
} 

Console.WriteLine("There are {0} instances of 's' in the string", charFrequencies['s']); 
+0

Bueno, es muy posible que se necesite más de una letra, y calcularla una vez es una buena idea. También puede escribir 's.GroupBy (c => c) .ToDictionary (g => g.Key, g => g.Count());', para lograr el mismo diccionario. Probablemente estoy usando demasiado LINQ ': P' – Kobi

0

probar este código:

namespace Count_char 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     string s1 = Convert.ToString(Console.ReadLine()); 
     for (int i = 97; i < 123; i++) 
     { 
      string s2 = Convert.ToString(Convert.ToChar(i)); 

      CountStringOccurrences(s1, s2); 
     } 


     Console.ReadLine(); 
    } 
    public static void CountStringOccurrences(string text, string pattern) 
    { 

     int count = 0; 
     int i = 0; 
     while ((i = text.IndexOf(pattern, i)) != -1) 
     { 
      i += pattern.Length; 
      count++; 

     } 
     if (count != 0) 
     { 
      Console.WriteLine("{0}-->{1}", pattern, count); 
     } 

    } 
} 

} 
Cuestiones relacionadas