Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz
  • 0

C# - działania na zmiennej typu string


Pitagoras333

Pytanie

Opublikowano

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++;
}                              

 

5 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

Opublikowano

@carbonx Dzięki, wyjaśnisz czym jest ten x w twoim kodzie  ? 

Zależy  mi jednak aby ktoś  mi przedstawił  jak zrobić  to w sposób  który  próbowałem, bo sądzę  że  ta umiejętność  będzie  przydatna xD

Opublikowano

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. 

Opublikowano

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.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...