Kolejne zadanko, ale coraz lepiej to idzie :)

0

Wczytaj z klawiatury ciąg znaków oraz dodatkowo pojedynczy znak. Sprawdź, ile razy podany element występuje w ciągu. Wykorzystaj metodę string.at().

string ciag;
char znak;
cout << "Napisz zdanie z powtarzajacym sie znakiem" << endl;
getline (cin, ciag);
cout << "Napisz znak ktory sie powtarza" << endl;
cin >> znak;
cout << ciag.at(znak);

Proszę o pomoc jak zastosować ową metodę, szukałem niestety dalej wychodzi coś takiego... Niestety czas nie pozwala na metodę prób i błędów w takich ilościach.

2

Źle zrozumiałeś zadanie, std::string::at() przyjmuje indeks i zwraca znak znajdujący się pod tym indeksem.

W zadaniu chodzi o to, żebyś wykorzystał pętlę i przeszedł znak po znaku, szukając czy któryś z nich jest taki sam jak ten wybrany.

size_t str_length = ciag.length();
for(size_t i = 0; i < str_length; i++) {
   if(ciag.at(i) == znak)
      sign_counter++;
}
2

Dwa sposoby poniżej

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

int main() {
	string ciag;
	char znak;
	cout << "Napisz zdanie z powtarzajacym sie znakiem" << endl;
	getline (cin, ciag);
	cout << "Napisz znak ktory sie powtarza" << endl;
	cin >> znak;
	// --- #1
	int idx = 0;
	int count = 0;
	while(idx < ciag.size()) {
		if (znak == ciag.at(idx++)) count++;
	}
	cout << count << endl;
	// --- #2
	int count2 = std::count_if(ciag.begin(), ciag.end(), [znak](char c){return c == znak;});
	cout << count2 << endl;
	return 0;
}

https://ideone.com/2hQs9F

(drugi sposób oczywiście nie korzysta z string::at(), więc to tak w celach poglądowych)

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