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.

