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.