Vissza
Karakterláncok (stringek)
Házi feladatok:
- Írjunk programot, mely meghatározza, hogy egy szövegállomány hány
szót tartalmaz. Szóelválasztó karakternek csak a space-et tekintjük.
- Írjunk programot, mely egy
szövegállomány minden egyes "m"
magánhangzóját kicseréli "mpm"-re, (azaz
írjuk át madárnyelvre a szöveget).
- Írjunk programot, mely egy
szövegállomány egy megadott szavát
kicseréli egy másik szóra (megadjuk, hogy mit
és azt is hogy mire).
- Írjunk programot, mely egy
szövegállományban felcseréli a kisbetűket
nagybetűkre és a nagybetűket kisbetűkre.
- Írjunk programot, mely meghatározza, hogy milyen
karakterek nem szerepelnek egy adott szövegállomány
karakterei között.
- Írjunk programot, mely megkeresi, hogy egy adott
szó hányszor fordul elő egy
szövegállományban.
- Írjunk programot, mely megkeresi, hogy egy adott
szó milyen pozíciókon fordul elő egy
szövegállományban.
- A szövegállományban
különböző típusú telefonszámok
vannak: rds, romtelecom, orange. Írjuk át
különböző állományokba az rds, a
romtelecom és az orange
telefonszámokat. A
romtelecom 265-tel, az rds 365-tel, az orange számok 74-gyel
kezdődnek, ahol egy telefonszámot karakterlánc
típusú tömbe tároljunk.
Megoldott feladatok:
1. Írjunk programot, mely beolvas egy
karakterláncot a billentyűzetről és meghatározza a
karakterlánc hosszát. Alkalmazzuk a
könyvtárfüggvény length-t., a string
hosszának a meghatározására.
#include
<iostream>
#include <string>
using namespace std;
int main()
{
string kars;
int l;
cout << "Kerek egy karakterlancot: ";
cin >> kars;
l =
kars.length();
cout << "A karakterlanc hossza: "<< l
<< endl;
cout << "A beolvasott karakterlanc: " <<
kars << endl << endl;
return 0;
}
2. Írjunk programot, mely beolvas egy
karakterláncot a
billentyűzetről és meghatározza a karakterlánc
hosszát. Alkalmazzunk
saját függvényt a string hosszának a
meghatározására.
#include
<iostream>
#include <string>
using namespace std;
int my_length(string kars);
int main()
{
string kars;
int l;
cout << "Kerek egy karakterlancot: ";
cin >> kars;
l =
my_length(kars);
cout << "A karakterlanc hossza: "<< l
<< endl;
cout << "A beolvasott karakterlanc: " <<
kars << endl << endl;
return 0;
}
int my_length(string s){
int i;
for(i=0;
s[i] != '\0'; ++i);
return i;
}
3. Írjunk programot, mely adott
szövegállomány minden egyes sorára
meghatározza a sorokban levő karakterek számát,
illetve megadja, hogy hány karakter van az
állományban. Az eredményt a bemeneti
állomány soraival együtt írjuk ki egy
másik állományba.
#include
<iostream>
#include <fstream>
#include <string>
using namespace std;
int main(){
string kars;
int l, k;
ifstream fin;
ofstream fout;
fin.open("main.cpp");
fout.open("ki.txt");
if ( !fin.good()
){
cout << "Megnyitasi
hiba!!" << endl;
return 0;
}
if ( !fout.good() ){
cout << "Megnyitasi
hiba!!" << endl;
return 0;
}
k = 0;
while(1){
fin >> kars;
if ( fin.eof() ) break;
l = kars.length();
k += l;
fout << l << " ";
fout << kars <<
endl;
}
fout << "A karakterek szama: " << k
<< endl;
fin.close();
fout.close();
return 0;
}
4. Adott egy szövegállomány.
Készítsünk karakter előfordulási
statisztikát.
#include
<iostream>
#include <iomanip>
#include <fstream>
using namespace std;
int main(){
char kar;
int i, stat[256];
ifstream fin;
fin.open("be.txt");
if ( !fin.good() ){
cout << "Megnyitasi
hiba!!" << endl;
return 0;
}
for (i=0; i<256; i++)
stat[i] = 0;
while (1){
fin >> kar;
if ( fin.eof() ) break;
stat[kar] ++;
}
fin.close();
cout << "A karakterek elofordulasi szama: "
<< endl;
for (i = 32; i<256; i++)
if( stat[i] != 0) {
cout << setw(7) << (char) i;
cout << setw(10) << stat[i] << endl;
}
cout << endl << endl;
return 0;
}
5. Írjunk programot, mely adott
szövegállomány minden egyes kisbetűjét
kicseréli nagybetűre.
#include
<iostream>
#include <fstream>
using namespace std;
int main(){
char kar;
int i;
ifstream fin;
ofstream temp;
fin.open("be.txt");
temp.open("temp.txt");
if ( !fin.good() ){
cout << "Megnyitasi
hiba!!" << endl;
return 0;
}
while(1){
fin >> noskipws
>> kar;
//kiolvassa
a feher karaktereket(space, enter, stb)
is
if (fin.eof() ) break;
if (kar >= 'a'
&& kar <= 'z') kar = kar - 32;
temp << kar;
}
fin.close();
temp.close();
remove("be.txt");
rename("temp.txt", "be.txt");
return 0;
}
A fenti feladatok standard C
író/olvasó függvényekkel
1. Írjunk
programot, mely beolvas egy
karakterláncot a billentyűzetről és meghatározza a
karakterlánc hosszát. Alkalmazzuk a
könyvtárfüggvény strlen-t., a string
hosszának a meghatározására.
#include
<stdio.h>
#include <string.h>
int main(){
char kars[80];
int l;
printf("Kerek egy karakterlancot: ");
gets(kars);
l =
strlen(kars);
printf("A karakterlanc hossza: %i\n", l);
printf("A beolvasott karakterlanc: %s", kars);
return 0;
}
2. Írjunk programot, mely beolvas egy
karakterláncot a
billentyűzetről és meghatározza a karakterlánc
hosszát. Alkalmazzunk
saját függvényt a string hosszának a
meghatározására.
#include
<stdio.h>
#include <stdlib.h>
int my_strlen(char []);
int main(){
char kars[80];
int l;
printf("Kerek egy karakterlancot: ");
gets(kars);
l =
my_strlen(kars);
printf("A karakterlanc hossza: %i\n", l);
system("pause");
return 0;
}
int my_strlen(char s[]){
int i;
for(i=0;
s[i] != '\0'; ++i);
return i;
}
3. Írjunk programot, mely adott
szövegállomány minden egyes sorára
meghatározza a sorokban levő karakterek számát,
illetve megadja, hogy hány karakter van az
állományban. Az eredményt a bemeneti
állomány soraival együtt írjuk ki egy
másik állományba.
#include
<stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char kars[80];
int l, k;
FILE * F = fopen("be.txt", "r");
if (F == NULL){ // hibakezeles
printf("Megnyitasi
hiba!!\n");
system("pause");
return 0;
}
FILE * G = fopen("ki.txt", "w");
if (G == NULL){
printf("Megnyitasi
hiba!!\n");
system("pause");
return 0;
}
k = 0;
while(1){
fgets(kars, 80, F);
if (feof(F)) break;
l = strlen(kars);
k += l; // soronkent osszeadjuk a
karakterek
szamat
fprintf(G, "%4i ", l);
fputs(kars, G);
}
fprintf(G, "A karakterek szama: %i\n", k);
fclose(F);
fclose(G);
return 0;
}
4. Adott egy szövegállomány.
Készítsünk karakter előfordulási
statisztikát.
#include
<stdio.h>
#include <stdlib.h>
int main(){
char kar;
int stat [256];
int i;
FILE * F = fopen("be.txt", "r");
if (F == NULL){
printf("Megnyitasi
hiba!!\n");
system("pause");
return 0;
}
for (i=0; i<256; i++)
stat[i] = 0;
while(1){
fscanf(F, "%c", &kar);
if (feof(F)) break;
stat[ kar ] ++;
}
fclose(F);
printf("\nkarakter elofordulasi_szam\n");
for(i = 32; i<256; i++)
//a 32-nel
nagyobb ASCII
kodú karakterek elofordulasi
//szamat irjuk ki
if( stat[i] != 0)
printf("%7c %10i\n", i, stat[i]);
printf("\n\n");
return 0;
}
5. Írjunk programot, mely adott
szövegállomány minden egyes kisbetűjét
kicseréli nagybetűre.
#include
<stdio.h>
#include <stdlib.h>
int main(){
char kar;
int i;
FILE * F = fopen("be.txt", "r");
FILE * G = fopen("temp.txt", "w");
if (F == NULL){
printf("Megnyitasi
hiba!!\n");
system("pause");
return 0;
}
while(1){
fscanf(F, "%c", &kar);
if (feof(F)) break;
if(kar >='a' && kar
<='z') kar = kar - 32;
fprintf(G, "%c", kar);
}
fclose(F);
fclose(G);
remove
("be.txt");
rename("temp.txt", "be.txt");
return 0;
}