ZADANIA - przetwarzanie danych tekstowych w C++

ZADANIA - przetwarzanie danych tekstowych w C++

  • Zestaw programów do napisania dla uczniów przygotowujących się do sprawdzianu.
  • Przykładowe kody do części problemów znajdziesz tu
  • Zagadnienia z tematu C1 w podręczniku.

lub pobierz go: ZADANIA - dane tekstowe w C++

Przykładowe kody do zadań:

  • Staramy się kodować SAMODZIELNIE !!! Tylko wtedy będzie przyrost Twoich umiejętności w programowaniu!
  • Jeśli jednak z jakiegoś powodu nie jesteś w stanie samodzielnie napisać kodu, to zobacz przykładowe rozwiązanie.
  • Przykładowe kody są opatrzone komentarzami ułatwiającymi zrozumienie poleceń.
  • Kody są napisane w możliwie najprostszy sposób dostępny dla ucznia liceum.

Zadanie 1:

//Zad.1 
#include <iostream>
#include <string>
using namespace std;

int main() {
	string imie, nazwisko;
	cout << "podaj imie: "; cin >> imie; //wczytanie imienia
	cout << "podaj nazwisko: "; cin >> nazwisko; //wczytanie nazwiska
	//toupper() zwraca kod ASCII dużej litery jeśli argumentem jest litera mała
	//np: toupper('a') zwróci 65 <-- kod litery A
	cout << "Twoje inicjaly: " << char(toupper(imie[0]))<< "." << char(toupper(nazwisko[0]))<< ".\n";
	if(imie[imie.length()-1]=='a') cout << "Jestes KOBIETA\n";
	else cout << "Jestes MEZCZYZNA\n";
	return 0;
}
zadanie 1 - pobierz

Zadanie 2:

//Zad.2 
#include <iostream>
#include <string>
using namespace std;

int main() {
	string w1, w2;
	int i;
	cout << "podaj pierwszy wyraz: "; cin >> w1; //wczytanie w1
	cout << "podaj drugi wyraz: "; cin >> w2; //wczytanie w2
	if(w1.length()==w2.length()) { //wyrazy tej samej długości
		cout << "wspolne znaki wyrazow i ich pozycje:\n";
		for(i=0; i<w1.length(); i++) { // iteracja po wszystkich znakach
			// jeżeli znaki w wyrazach są te same wyświetl znak i index
			if(w1[i]==w2[i]) cout << "znak: " << w1[i] << " index znaku: " << i << endl;
		}
	} else { //wyrazy NIE są tej samej długości
		cout << "Wyrazy NIE sa tej samej dlugosci.\n";
		// jeśli w1 jest dłuższy od w2
		if(w1.length()>w2.length()) cout << "Wyraz 1 jest o " << w1.length()-w2.length() << " znaki dluzszy niz wyraz w2.";
		// w przeciwnym przypadku (tzn. w2 jest dłuższy od w1)
		else cout << "Wyraz 2 jest o " << w2.length()-w1.length() << " znaki dluzszy niz wyraz w1.";
	}
	return 0;
}
zadanie 2 - pobierz

Zadanie 3:

//Zad.3
#include <iostream>
#include <string>
using namespace std;

int main() {
	string wyraz;
	int i;
	int n; //oczekiwana całkowita ilość znaków
	cout << "podaj wyraz: "; cin >> wyraz; //wczytanie wyrazu
	cout << "podaj oczekiwana ilosc znakow: "; cin >> n; //wczytanie n
	// jeśli wyraz="bit" i n=7, to zmienna i przyjmie wartości {3, 4, 5, 6} 
	// trzeba dopisać 4 znaki *
	// ogólnie pętla będzie jak poniżej:
	for(i=wyraz.length(); i<n; i++) wyraz = wyraz + '*';
	cout << "wynik: " << wyraz;
	return 0;
}
zadanie 3 - pobierz

Zadanie 4:

//Zad.4
#include <iostream>
#include <string>
using namespace std;

int main() {
	string wyraz;
	int i;
	cout << "podaj wyraz: "; cin >> wyraz; //wczytanie wyrazu
	
	cout << "\nSPOSOB 1: ";
	for(i=wyraz.length()-1; i>=0; i--) cout << wyraz[i];
	
	cout << "\nSPOSOB 2: ";
	for(i=0; i<wyraz.length(); i++) cout << wyraz[wyraz.length()-1-i];
	return 0;
}
zadanie 4 - pobierz

Zadanie 5:

//Zad.5
#include <iostream>
#include <string>
using namespace std;

int main() {
	string wyraz;
	string poZmianach=""; //zmienna wynikowa
	int i;
	cout << "podaj wyraz: "; cin >> wyraz; //wczytanie wyrazu
	poZmianach = poZmianach + "#"; //pierwszy znak zmiennej poZmianach to '#'
	for(i=0; i<wyraz.length(); i++){
		// do zmiennej poZmianach dokładamy kolejny znak z wyrazu i znak '-'
		if(i!=wyraz.length()-1) poZmianach = poZmianach + wyraz[i] + "-";
		// ostatnia litera w wyrazu jest dołożona bez znaku '-'
		else poZmianach = poZmianach + wyraz[i];
	}
	poZmianach = poZmianach + "!"; //ostatni znak zmiennej poZmianach to '#'
	cout << poZmianach; // wyświetlenie zmiennej
	return 0;
}
zadanie 5 - pobierz

Zadanie 6:

//ZADANIE 6
//Sprawdzenie czy wczytany wyraz (bez spacji) to PALINDROM
// UWAGA!!! Algorytm działa ale NIE JEST OPTYMALNY. Pary znaków sprawdzane są niepotrzebnie dwukrotnie!
// Zastanów sią jak to zmienić!!!
#include <iostream>
#include <string>
using namespace std;

bool czyPalindrom(string s){
	int i;
	for(i=0; i<s.length(); i++) if(s[i]!=s[s.length()-i-1]) return false;
	return true;	
}

int main() {
	int i;
	string tekst;
	cout << "podaj tekst: ";
	getline(cin, tekst);
	if(czyPalindrom(tekst)) cout << "\nto jest palindrom";
	else cout << "\nto nie jest palindrom";
	return 0;
}
zadanie 6 - pobierz

Zadanie 7:

//Zad.7
#include <iostream>
#include <string>
using namespace std;

int main() {
	string wyraz;
	int suma=0; //szukana suma kodów ASCII znaków wyrazu
	cout << "podaj wyraz: "; cin >> wyraz; //wczytanie wyrazu
	// int(wyraz[i]) - jawne rzutowanie znaku wyraz[i] na liczbę int
	// zadziała również jeśli w poniższej linii będzie: suma += wyraz[i];
	for(i=0; i<wyraz.length(); i++) {
		cout << wyraz[i] << " - " << int(wyraz[i]) << endl;
		suma += int(wyraz[i]);	
	}
	cout << "suma kodow ASCII wszystkich znakow wyrazu: " <<suma;
	return 0;
}
zadanie 7 - pobierz

Zadanie 8:

//Zad.8 ilosc wyrazów i zdań w tekście
#include <iostream>
#include <string>
using namespace std;

int main() {
	string tekst; // wczytywany tekst
	int i, 
	iloscS=0, //ilość spacji w tekście
	iloscK=0; //ilość kropek w tekście
	cout << "podaj wyrazenie tekstowe: ";
	getline(cin, tekst); // wczytanie tekstu ze spacjami.
	// iteracja po wszystkich znakach tekstu
	for(i=0; i<tekst.length(); i++){
		if(tekst[i]==' ') iloscS++; // jeśli jest spacja, to ich ilość zwiększam o 1
		if(tekst[i]=='.') iloscK++; // jeśli jest kropka, to ich ilość zwiększam o 1
	}
	//wyniki
	cout << "ilosc wyrazow: " << iloscS+1 << endl;
	cout << "ilosc zdan: " << iloscK << endl;
	return 0;
}
zadanie 8 - pobierz

Zadanie 9:

//Zad.9 Napisz program, który:
//a. wczyta wyraz z klawiatury,
//b. wyświetli ile jest w tym wyrazie dużych liter i małych liter,
//c. zamieni wszystkie litery małe na duże i duże na małe.
#include <iostream>
#include <string>
using namespace std;

int main() {
	int i, 
	kod, //kod ASCII znaku
	iloscD=0, // ilosc liter dużych
	iloscM=0; // ilosc liter małych
	string wyraz;
	cout << "podaj wyraz: "; cin >> wyraz;
	
	//iteracja po wszystkich znakach tekstu
	for(i=0; i<wyraz.length(); i++) {
		kod=int(wyraz[i]); //kod ASCII znaku wyraz[i]
		//cout << kod << " ";
		if(kod>=65 && kod <=90) { // kody ASCII liter dużych są w przedziale <56, 90>
			iloscD++;
			// różnica w kodzie między małą i dużą literą jest zawsze 32
			// "dodając" do dużej litery 32 otrzymamy literę małą
			wyraz[i]=wyraz[i]+32; // zamiana dużej litery na małą
		}
		if(kod>=97 && kod <=122) { // kody ASCII liter małych są w przedziale <97, 122>
			iloscM++;
			// różnica w kodzie między małą i dużą literą jest zawsze 32
			// "odejmując" od małej litery 32 otrzymamy literę dużą
			wyraz[i]=wyraz[i]-32; // zamiana małej litery na dużą
		}
	}
	cout << "ilosc liter: " << wyraz.length() <<endl;
	cout << "ilosc liter duzych: " << iloscD <<endl;
	cout << "ilosc liter malych: " << iloscM <<endl;
	cout << "po zamianie: " << wyraz;
	return 0;
}
zadanie 9 - pobierz

Zadanie 10:

//Zad.10
#include <iostream>
#include <string>
using namespace std;
     
int main() {
 	string w1, w2, wynik="";
    	unsigned int i;
    	cout << "w1= "; cin >> w1; //wczytanie w1
    	cout << "w2= "; cin >> w2; //wczytanie w2
    	// jeżeli wyraz w1 jest dłuższy niż w2
    	if(w1.size()>w2.size()){
    		for(i=w2.length(); i<w1.length(); i++) cout << w1[i];
    	// w przeciwnym przypadku jeśli wyraz w2 jest dłuższy niż w1	
    	} else if(w2.size()>w1.size()){
    		for(i=0; i<w1.length(); i++) cout << w2[i];
    	// w przeciwnym przypadku tzn. jeśli wyrazy w1 i w2 są tej samej długości	
    	} else {
    		// iteracja tyle razy ile jest znaków w wyrazach (w1.length()==w2.length())
    		for(i=0; i<w1.length(); i++){
    			wynik = wynik + w1[i]; // do wyniku dokładam znak na pozycji i w wyrazie w1
    			wynik = wynik + w2[i]; // do wyniku dokładam znak na pozycji i w wyrazie w2
    		}
    		cout << "wynik: " << wynik;
    	}
        return 0;
}
zadanie 10 - pobierz

Zadanie 11:

//Zad.11
#include <iostream>
#include <string>
using namespace std;

int main() {
	string wyraz; 
	string wynik=""; // zmienna wynikowa - na początku pusty łańcuch
	int i;
	cout << "podaj wyraz: "; cin >> wyraz; //wczytanie wyrazu
	wynik = wyraz + '-';	//wynik to teraz wczytany wyraz i znak '-'
	for(i=wyraz.length()-1; i>=0; i--) wynik = wynik + wyraz[i];
	cout << "wynik: " << wynik; // wyświetlenie zmiennej
	return 0;
}
zadanie 11 - pobierz

Użycie kodów:

  • Powyższy kod można wykorzystać w środowiski Dev C++. Wystarczy utworzyć nowy projekt i wkleić ten kod zamiast istniejącego.
  • Można też użyć kodu na jednej ze stron WWW z kompilatorami on-line, na przykład na stronie: www.cpp.sh
  • Jeśli powyższy kompilator będzie ostrzegał, że: to możesz zmienić deklaracje zmiennej, której to dotyczy z int na unsigned int.