Стрингови - задаци¶
Од ових задатака, већина је поновљена на страници Регуларни изрази - задаци, где се очекује да буду решени помоћу регуларних израза. Овде их треба решити користећи методе за обраду стрингова.
1.
Написати програм који уклања водеће нуле из IP адресе. На пример, за унету адресу 192.068.005.010
треба исписати 192.68.5.10
.
Савет: након растављања улазног стринга на четири дела, можете да искористите конверзију у број, а затим поново у стринг.
2.
Написати функцију која за дати низ целих бројева формира стринг који садржи редом записе тих бројева,
раздвојене цртицом. Цртица не треба да се појави ни на почетку ни на крају стринга. На пример, за дати
низ бројева \(\{ 381, 64, 555, 333\}\), функција треба да врати стринг 381-64-555-333
.
Написати и програм који демонстрира рад функције.
3.
Правописи разних језика прописују различите начине писања реалних бројева. Тако се на енглеском
језику знак ,
користи за раздвајање група од по три цифре у целобројном делу, а знак .
се
користи да одвоји децимални (разломљени) део броја. У текстовима на српском језику знакови
,
и .
имају обрнуте улоге.
Написати програм који за дати запис броја по правопису енглеског језика приказује запис истог
броја по правопису српског језика. На пример, за дати запис 28,517,324.28
треба исписати
28.517.324,28
.
4. Написати функцију која за дати стринг враћа низ стрингова, добијених растављањем улазног стринга помоћу запета и уклањањем белина на почетку и крају сваког дела, с тим да се запете под наводницима не користе за раздвајање. На пример, за стринг
Petar Markovic , "matematika, fizika" , 5 , "odbojka, stoni tenis"
функција треба да врати низ од следећа четири стринга:
"Petar Markovic"
"matematika, fizika"
"5"
"odbojka, stoni tenis"
Написати и програм који демонстрира рад функције (стрингове исписивати без наводника).
5.
Написати програм који проверава да ли дати стринг испуњава услове да буде јака лозинка. Лозинка
је јака ако се састоји од бар 10 карактера, садржи бар једно мало слово, бар једно велико слово,
бар једну цифру и бар један знак који није алфанумерик (тј. није ни слово ни цифра ни доња црта).
На пример, лозинка Ve#78_set14
јесте јака, а лозинка OtkrivanjeLozinke
није.
6. Написати програм који дати текст претвара у име променљиве на следећи начин:
Текст се растави на делове, користећи белине као раздвајач
Из сваког дела се уклоне знаци који нису алфанумерици
Почетно слово сваког дела осим првог се конвертује у велико, а сва остала слова у мала
Добијени делови се споје
На пример, за текст broj malih, raznovrsnih kupovina
име променљиве би било
brojMalihRaznovrsnihKupovina
7.
Написати програм који преправља име променљиве из тзв. стила camelCase
у стил snake_case
.
На пример, за унето nekoDugackoIme
треба исписати neko_dugacko_ime
.
8.
Написати програм за пресловаљавање (транслитерацију) садржаја датог текстуалног фајла из латинице
у ћирилицу. У овом задатку се подразумева да се свако појављивање lj
, nj
и dž
замењује
редом са љ
, њ
и џ
. Програму се задају само путање до улазног и излазног фајла.
9.
Написати програм који проверава да ли се дато име фајла уклапа у дату маску. У масци знак ?
замењује тачно један, било који карактер, а знак *
замењује било који низ од нула или више
карактера у имену фајла. На пример, име фајла program.cs
се уклапа у маску *.cs
, а име
фајла a-12.txt
се не уклапа у маску a??.txt
. Подразумева се да се у масци појављује
највише један знак *
.
10. Написати програм за одигравање једног потеза у познатој игри вешала (погађање задатог текста). Улазни подаци су:
текст који се погађа
текст са погођеним словима и доњим цртама уместо непогођених слова
слово које представља нови упит
Програм треба да испише нови изглед текста са погођеним словима. На пример, за улазне податке
abrakadabra
a__a_a_a__a
r
програм треба да испише
a_ra_a_a_ra
11. Написати програм који проверава да ли су два дата текста иста, ако се игноришу сувишне белине и интерпункција, а мала слова се не разликују од великих. Од више узастопних белина, сувишне су све осим једне. На пример, за унете текстове:
ko rano rani, dve srece grabi.
Ko rano rani dve srece grabi
програм треба да испише DA
.
12. Написати програм који израчунава и исписује збир свих бројева који се појављују у тексту. На пример, за унети текст
dokument A ima 12 stranica, a program B ima 537 linija koda.
програм треба да испише 549
, јер је \(12+537=549\).
13. Написати програм који за дати улазни текстуални фајл и дату вредност маргине \(M\), креира нови фајл са истим текстом, пресложен тако да је сваки ред што је могуће дужи, али да по дужини не прелази \(M\) карактера. Подразумева се да у тексту нема речи дужих од \(M\). Празни редови се преписују у излазни фајл, све остале белине се при преписивању замењују једним размаком или преласком у нови ред.
Програму се задају путање до улазног и излазног фајла, као и вредност \(M\). На пример, ако је маргина \(M=20\), а улазни фајл изгледа овако:
Juce se na prvom spratu dogodilo
nesto zaista inspirativno.
(Sledi opis dogadjaja)
Ovaj lep primer isticemo kao nesto
na sta svi mozemo da se ugledamo.
излазни фајл треба да изгледа овако:
Juce se na prvom
spratu dogodilo
nesto zaista
inspirativno. (Sledi
opis dogadjaja)
Ovaj lep primer
isticemo kao nesto
na sta svi mozemo da
se ugledamo.
14. Написати програм који из датог фајла са C# кодом уклања све коментаре. Програму се задају путање до улазног и излазног фајла. На пример, ако улазни фајл изгледа овако:
using System;
class Program
{
/*
program koji izracunava zbir n datih brojeva,
a iz koga treba izbaciti komentare oba tipa
tj. i ove // i one druge
/*
static void Main(string[] args)
{
Console.WriteLine("Iz ovog programa treba ukloniti sve");
Console.WriteLine("komentare, tj. i one koji pocinju ovako /*");
Console.WriteLine("a zavrsavaju ovako */, kao i one koji");
Console.WriteLine("pocinju ovako // i traju do kraja reda");
int n = int.Parse(Console.ReadLine()); // unosimo n
int s = 0;
for (int i = 0; i < n; i++)
{
int a = int.Parse(Console.ReadLine());
s += a; /*sabiramo*/
}
// ispisujemo
Console.WriteLine(s);
}
}
излазни фајл треба да изгледа овако:
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Iz ovog programa treba ukloniti sve");
Console.WriteLine("komentare, tj. i one koji pocinju ovako /*");
Console.WriteLine("a zavrsavaju ovako */, kao i one koji");
Console.WriteLine("pocinju ovako // i traju do kraja reda");
int n = int.Parse(Console.ReadLine());
int s = 0;
for (int i = 0; i < n; i++)
{
int a = int.Parse(Console.ReadLine());
s += a;
}
Console.WriteLine(s);
}
}
15.
Написати програм који допуњава фајл са оценама. Формат и улазног и излазног фајла је csv
(comma separated values, вредности раздвојене запетама). Програму се из командне линије
редом задају: путања до улазног фајла, назив предмета, оцене из тог предмета у једном реду,
и на крају путања до излазног фајла. Називи свих предмета се налазе у првом реду улазног фајла.
Подразумева се да је улазни фајл исправан и да је низ оцена одговарајуће дужине.
На пример, ако су улазни подаци
a.csv
matematika
3 4 4 2 5 4
b.csv
а улазни фајл a.csv
изгледа овако
ime, srpski, engleski, matematika, programiranje, vladanje
Pera, 5, 4, , , 5
Jovan, 3, 5, , , 5
Marko, 5, 5, , , 4
Ana, 4, 4, , , 5
Luka, 4, 4, , , 5
Marija, 4, 5, , , 5
онда излазни фајл b.csv
треба да изгледа овако:
ime, srpski, engleski, matematika, programiranje, vladanje
Pera, 5, 4, 3, , 5
Jovan, 3, 5, 4, , 5
Marko, 5, 5, 4, , 4
Ana, 4, 4, 2, , 5
Luka, 4, 4, 5, , 5
Marija, 4, 5, 4, , 5