Skocz do zawartości
  • 0

C# - działania na zmiennej typu string


Pitagoras333
 Udostępnij

Pytanie

Hej, chciał bym pobawić się trochę na stringach, i np chce sprawdzić ile razy dany znak występuje w napisie. W tym celu chce potraktować string jako tablice i przeglądać każdy znak oddzielnie za pomocą pętli, podpowie ktoś jak to zapisać ? Bo w c++ zapisywałem to mniej więcej tak ale tutaj nie działa xD :

string s="abcdefg";
int k=0;
for (int i=0; i<s.Length;i++)
{
   if(s[i]=='a')
   k++;
}                              

 

Odnośnik do komentarza
Udostępnij na innych stronach

5 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Konstrukcja z tym x nazywa się lambda (patrz w tu dokumentacje).  Są to funkcje o krótkim zapisie, choć to nie jedyny warunek dlaczego powstały. Mogą także służyć jako filtr jak w powyższym rozwiązaniu. 
Wracając do kodu podanego przez kolegę @carbonx 

var k = s.Count(x => x == 'a') //w zmiennej k masz ilość wystąpień litery 'a' w stringu
  
s.Count(); <- Count() samo w sobie, bez jakiegokolwiek argumentu(to wszystko pomiędzy nawiasami), zwróciłoby łączną ilość obiektów w tablicy s

A sama lambda jest równoznaczna z tym : 

lambda: 
x => x == 'a' 

1. Wariant: 
zmienna => policz zmienna jezeli jest rowna 'a' 
2. Wariant jak funkcja:
bool Check(string x){
	return x == 'a'; //zwroci true albo false. Taki szybki if ;)
}

i teraz do najważniejsze. Gdy dajesz Count(), a w argumencie wpisujesz lambde (czyt. filtr), to funkcja Count() będzie za każdym iterowanym ( liczonym w danym momencie ) objektem porównywać go na zasadzie tej lambdy (filtra). Zasada prosta jako x podmienia każdy kolejny obiekt, jeżeli spełnia warunek (patrz góra) to zostaje dodany do sumy, jeżeli nie zostaje pomijany. 
 

Mam nadzieje, że jasno wyjaśniłem. 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Jeżeli chcesz do tego użyć stricte pętli to ja zrobiłbym to prostym foreachem:

int count = 0; //deklarujesz zmienną count, w której przechowujesz ilość wystąpień danego znaku
	foreach (char c in s.Trim()) //przypisujesz do chara 'c' poszczególną literę z Twojego słowa
		if (c == 'a') count++; //sprawdzasz czy char == znak, który chcesz policzyć, a jeśli tak to dodajesz 1 do 'count', które przechowuje Ci ilość wystąpień

oczywiście sposobów na rozwiązanie Twojego problemu jest mnóstwo, a to jedynie jeden z przykładów, natomiast wydaje mi się, że jest stosunkowo krótki i prostszy.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Zaloguj się poniżej.

Zaloguj się
 Udostępnij

  • Ostatnio przeglądający forum C#   0 użytkowników
    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...