Z ilu różnych znaków składa się napis

0

Funkcja: int f1(char napis[])zwraca w wyniku z ilu różnych znaków składa się napis. Np.: f1(„Ala ma kota”) wynik 8 (Ala mkot)

#include <iostream>
#include <string>
using namespace std;

int f1(char napis[]) {
	int wyn = 0;
	for (int i = 0; i < strlen(napis); i++) {
		if (napis[i] != napis[i]) {
			wyn = napis[i];
		}
	}
	return wyn;
}

int main()
{
	cout << "Podaj napis \n";
	char napis[20];
	cin.get(napis, 20);
	cout << f1(napis);
	return 0;
}

Mój kod na chwilę obecną wygląda tak, kompletnie nie mam pojęcia jak się do tego zabrać

0

Powinien być std:vector<char>, który na początku jest pusty, a dodawane są wszystkie znaki, których nie ma w tej strukturze. Przed dodaniem znaku do wektora sprawdzasz, czy taki znak już jest i dodajesz tylko wtedy, gdy nie ma. Na koniec zwracasz liczbę elementów zawartych w wektorze.

5
size_t f1(std::string napis) {
	return std::set(std::begin(napis), std::end(napis)).size();
}
3

Wyobraź że dostajesz kartkę z tekstem i musisz to zadanie wykonać ręcznie.
Zastanów się jak to zrobisz.

0

Jesli to c++, to Możesz użyć std::set,
https://www.cplusplus.com/reference/set/set/
Iterujesz po napisie, dodając elementy do zbioru, a jego długość będzie szukaną liczba.

0
rajszym napisał(a):
> size_t f1(std::string napis) {
> 	return std::set(std::begin(napis), std::end(napis)).size();
> }
> ```

Jaki jest powod sortowania?
Jaki jest powod kopiowania `napis`?
1
eleventeen napisał(a):
rajszym napisał(a):

Jaki jest powod sortowania?
Jaki jest powod kopiowania napis?

Musisz pohejtować zamiast podać alternatywę?

size_t f1(const string &s) { return unordered_set<char>(begin(s),end(s)).size(); }

1 użytkowników online, w tym zalogowanych: 0, gości: 1