Programiranje u C++-u - pitanja i odgovori
- poruka: 7.284
- |
- čitano: 1.947.584
- |
- moderatori:
XXX-Man
- +/- sve poruke
- ravni prikaz
- starije poruke gore
Pozdrav svima
Moze li mi neko pomoci oko ovog zadatka?
Uraditi 3 primjera izvlacenja odredjenih karaktera iz niza karaktera koji moze sadrzavati kontrolne znakove (CR=0x0D ; LF=0x0A),prazna mjesta(0x20) ,brojeve i slova predstavljene ASCII karakterima. Niz je potrebno inicijalizirati i odredjene karaktere izvuci iz njega i staviti u novi niz i isipisati ga na konzolu.
Kao neki primjer dobio sam jedan string niz " niz1={0x0D, 0x0A , W , = , + , 1 , 2, 5 , . , 3 , k , g , 0x00} "
Na toj konzoli ce vec pisati ovo " W= +......kg " ali ja u zadatku moram izvuci ove brojeve od "+" do "k" ali ne smijem izvlaciti broj po broj vec sve odjednom da se izvuce u neki novi niz (npr. niz2).Ako mi mozete uraditi ovaj primjer pa cu ja onda skontati jos 2 primjera ili ako mi mozete dati neki link gdje ima objasnjeno kako se ovo radi , jer ja ne mogu nigdje naci.
Unaprijed se zahvaljujem svima
Trebam pomoć oko CodeBlocksa, naime na AltGr+B mi automatski ubaciva :
/** \brief
*
*
*/
koliko vidim to je neki key prečac, ali ne znam kako da ga maknem, tj. prečešljao sam keyboard shortcuts ali ništa nigdje nisam naišao na kombinaciju AltGr+B (gledao sam i pod goto functions i sve okolo na okolo i nula bodova).
Please help.
Trebam pomoć oko CodeBlocksa, naime na AltGr+B mi automatski ubaciva :
/** \brief
*
*
*/
koliko vidim to je neki key prečac, ali ne znam kako da ga maknem, tj. prečešljao sam keyboard shortcuts ali ništa nigdje nisam naišao na kombinaciju AltGr+B (gledao sam i pod goto functions i sve okolo na okolo i nula bodova).
Please help.
ideš na settings -> editor -> skrolaj lijevu stranu prozora do keybord shortcuts -> otvori zatim na desno DoxyBlocks -> uncheck(remove) ili block comment ili load template -> gameOver
ne znam koji je točno jer ja disejblam sve shorcutove koji mi smetaju na početku tako da zaboravio koji točno.
ma to je klasika s tim prečacima, na QtCreatoru ista priča { je uvijek kombinacija za build (valjda defult za en-usa postavke)
uglavnom učini ovako.
Please help.
Hint: ALT GR je isto što i CTRL + ALT
Ali nik_02 ti je već dao kompletno objašnjenje...
Pozdrav svima
Moze li mi neko pomoci oko ovog zadatka?
Uraditi 3 primjera izvlacenja odredjenih karaktera iz niza karaktera koji moze sadrzavati kontrolne znakove (CR=0x0D ; LF=0x0A),prazna mjesta(0x20) ,brojeve i slova predstavljene ASCII karakterima. Niz je potrebno inicijalizirati i odredjene karaktere izvuci iz njega i staviti u novi niz i isipisati ga na konzolu.
Kao neki primjer dobio sam jedan string niz " niz1={0x0D, 0x0A , W , = , + , 1 , 2, 5 , . , 3 , k , g , 0x00} "
Na toj konzoli ce vec pisati ovo " W= +......kg " ali ja u zadatku moram izvuci ove brojeve od "+" do "k" ali ne smijem izvlaciti broj po broj vec sve odjednom da se izvuce u neki novi niz (npr. niz2).Ako mi mozete uraditi ovaj primjer pa cu ja onda skontati jos 2 primjera ili ako mi mozete dati neki link gdje ima objasnjeno kako se ovo radi , jer ja ne mogu nigdje naci.
Unaprijed se zahvaljujem svima
Itko?
Pozdrav svima
Moze li mi neko pomoci oko ovog zadatka?
Drugim riječima: nisi ni probao samostalno.
Suvišni znakovi (linefeed, carriage-return, razmak...), se mogu nalaziti i usred podstringa koji izvlačiš?
#include <stdio.h>
#include <string.h>
int main()
{
char niz1[]={0x0D, 0x0A, 'W', '=', '+', '1', '2', '5', '.', '3', 'k', 'g', 0x00};
char *niz_start, niz2[32]={0};
//neka oba brojaca budu inicijalizirana na defaultne vrijednosti
int n=0, i=0;
//trazimo znak '+' u prvom nizu
niz_start=strchr(niz1, '+');
//vrijednost brojaca 'n' postavljamo na poziciju
//prvog znaka nakon znaka '+'
if (niz_start)
n=niz_start-niz1+1;
//petlju ponavljamo dok ne naidemo na slovo 'k' ili kraj stringa
for ( ; tolower(niz1[n])!='k' && niz1[n]!=0; n++)
{
//ako je trenutni znak u prvom_nizu broj ili tocka, upisemo
//ga u novi niz i uvecamo brojac 'i' za jedan.
if (isdigit(niz1[n]) || niz1[n]=='.')
{
niz2[i++]=niz1[n];
}
}
printf("%s\n", niz2);
return 0;
}
Nešto ovakvo?
Pozdrav svima
Moze li mi neko pomoci oko ovog zadatka?
Drugim riječima: nisi ni probao samostalno.
Suvišni znakovi (linefeed, carriage-return, razmak...), se mogu nalaziti i usred podstringa koji izvlačiš?
#include <stdio.h>
#include <string.h>
int main()
{
char niz1[]={0x0D, 0x0A, 'W', '=', '+', '1', '2', '5', '.', '3', 'k', 'g', 0x00};
char *niz_start, niz2[32]={0};
//neka oba brojaca budu inicijalizirana na defaultne vrijednosti
int n=0, i=0;
//trazimo znak '+' u prvom nizu
niz_start=strchr(niz1, '+');
//vrijednost brojaca 'n' postavljamo na poziciju
//prvog znaka nakon znaka '+'
if (niz_start)
n=niz_start-niz1+1;
//petlju ponavljamo dok ne naidemo na slovo 'k' ili kraj stringa
for ( ; tolower(niz1[n])!='k' && niz1[n]!=0; n++)
{
//ako je trenutni znak u prvom_nizu broj ili tocka, upisemo
//ga u novi niz i uvecamo brojac 'i' za jedan.
if (isdigit(niz1[n]) || niz1[n]=='.')
{
niz2[i++]=niz1[n];
}
}
printf("%s\n", niz2);
return 0;
}
Nešto ovakvo?
Kako ukucas ovo?(podebljano)
Pozdrav svima
Moze li mi neko pomoci oko ovog zadatka?
Drugim riječima: nisi ni probao samostalno.
Pokusao sam u skoli kad smo bili i nikako nisam uspio uraditi ,a trazio sam i po internetu negdje i nisam mogao naci. U ispisu na konzoli stalno stoji W= i onda se na to dodaju karakteri koji se izvuku iz stringa (npr. W= 125,4) nije ovo lose i hvala ti ,ali mene zanima da li ima neki jednostavniji ili neki drugi nacin da se ovo uradi. Da li mi moze neko dati link sa nekim primjerima i objasnjenjem kako se ovo radi da malo izvjezbam.
//trazimo znak '+' u prvom nizu
niz_start=strchr(niz1, '+');
Kako ukucas ovo?(podebljano)
Tipkovnicom? :D
Sorry, ne razumijem pitanje, objasni.
U ispisu na konzoli stalno stoji W= i onda se na to dodaju karakteri koji se izvuku iz stringa (npr. W= 125,4)
Nisi li napisao da poslije znaka '=' dolazi '+'? To je bitno, jer mijenja stvari...
nije ovo lose i hvala ti ,ali mene zanima da li ima neki jednostavniji ili neki drugi nacin da se ovo uradi. Da li mi moze neko dati link sa nekim primjerima i objasnjenjem kako se ovo radi da malo izvjezbam.
Koliko bi jednostavnije od toga? Zar nisam stavio komentare? Svaki korak ti je objašnjen. Evo imaš za zadatak pojednostavniti moje rješenje.
U ispisu na konzoli stalno stoji W= i onda se na to dodaju karakteri koji se izvuku iz stringa (npr. W= 125,4)
Nisi li napisao da poslije znaka '=' dolazi '+'? To je bitno, jer mijenja stvari...
nije ovo lose i hvala ti ,ali mene zanima da li ima neki jednostavniji ili neki drugi nacin da se ovo uradi. Da li mi moze neko dati link sa nekim primjerima i objasnjenjem kako se ovo radi da malo izvjezbam.
Koliko bi jednostavnije od toga? Zar nisam stavio komentare? Svaki korak ti je objašnjen. Evo imaš za zadatak pojednostavniti moje rješenje.
da dolazi i '+' zaboravio sam napisati. ok ako ne moze jednostavnije imas li neki link sa primjerima da malo provjezbam
imas li neki link sa primjerima da malo provjezbam
jok...
//trazimo znak '+' u prvom nizu
niz_start=strchr(niz1, '+');
Kako ukucas ovo?(podebljano)
Tipkovnicom? :D
Sorry, ne razumijem pitanje, objasni.
To ispred i za "+" samo po jedna crtica :)
//trazimo znak '+' u prvom nizu
niz_start=strchr(niz1, '+');
Kako ukucas ovo?(podebljano)
Tipkovnicom? :D
Sorry, ne razumijem pitanje, objasni.
To ispred i za "+" samo po jedna crtica :)
niz1 je vec inicijalizirao na pocetku, tako da ga nije potrebno kasnije unositi. Za 'x' koristi jednostruke navodnike zato sto on treba biti tipa char. U C/C++ jednostruki navodnici koriste za tip char, tj. kada mislis na jedan specifican znak, a kada koristis znakovni niz(vise znakova) tj. polje tipa char onda koristis dvostruke navodnike. Kad znakovni niz inicijaliziras pomocu dvostrukih navodnika, onda se na kraj toga niza dodaje 0 znak koji oznacava kraj niza. Tako ako stavis "x" to je ustvari polje od dva znaka {'x', 0}.
//trazimo znak '+' u prvom nizu
niz_start=strchr(niz1, '+');
Kako ukucas ovo?(podebljano)
Tipkovnicom? :D
Sorry, ne razumijem pitanje, objasni.
To ispred i za "+" samo po jedna crtica :)
niz1 je vec inicijalizirao na pocetku, tako da ga nije potrebno kasnije unositi. Za 'x' koristi jednostruke navodnike zato sto on treba biti tipa char. U C/C++ jednostruki navodnici koriste za tip char, tj. kada mislis na jedan specifican znak, a kada koristis znakovni niz(vise znakova) tj. polje tipa char onda koristis dvostruke navodnike. Kad znakovni niz inicijaliziras pomocu dvostrukih navodnika, onda se na kraj toga niza dodaje 0 znak koji oznacava kraj niza. Tako ako stavis "x" to je ustvari polje od dva znaka {'x', 0}.
Znam ja to ali kako da to unesem sa tastature :)
LOL!
Na mojoj tipkovnici je poslije nule, tipka sa upitnikom i jednostrukim navodnikom.
Možeš sa string nizom to napraviti, dovoljan je metod substring() string klase.
Pogledaj ovdje kako se radi sa string nizovima http://www.cplusplus.com/reference/string/string/ .
Kad pogledaš te školske primjere, dovoljno je da to napraviš.
#include <iostream>
#include<string>
using namespace std;
int main()
{
char buffer[] = {0X0D, 0x0A, 'W', '=', '+', '1', '2', '5', '.', '3', 'k', 'g', 0x00};
string niz (buffer);
string niz1 = niz.substr(niz.find("+")+1, niz.find("k")-niz.find("+")-1);
cout<< niz1 << endl;
return 0;
}
Što se tiče char niza, možemo ovako sa aritmetikom pokazivača:
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
char buffer[] = {0X0D, 0x0A, 'W', '=', '+', '1', '2', '5', '.', '3', 'k', 'g', 0x00};
char* niz = strchr(buffer, '+')+1;
int n = strchr(buffer, 'k') - strchr(buffer, '+')-1;
niz[n] = '\0';
printf("%s", niz);
return 0;
}
Od pozicije prvog broja aritmetikom pokazivača izračunamo broj mjesta koje zauzimaju brojevi, a onda mjesto iza lupimo znak za prekid niza.
Time je ispunjen temeljni zahtjev zadatka da nema petlji, odnosno pojedinačnog izvlačenja brojeva.
Da, ali ne filtriraš znakove.
Što ako dobiješ kao input:
{0X0D, 0x0A, 'W', '=', '+', '0x20, '1', '2', '5', '.', '3', 0x20, 'k', 'g', 0x00};
Pa veselo ugrabiš i suvišne razmake. Cijela poanta onog mog rješenja je pobrinuti se da ništa neželjeno ne upadne u rezultat. Mislim, koji bi smisao u zadatku bio posebno navoditi da ulazni niz može sadržavati i kontrolne znakove? Ne bi li onda bilo jednostavnije napisati: iz niza "bla bla bla" izvući sve znakove od x do y? Kratko i jasno.
Ne znam, možda sam ja krivo shvatio zadatak i ovo pojedino izvlačenje se doista odnosi na zabranu korištenja petlji... ja sam to shvatio tako da ne smije odmah ispisivati znak po znak u konzolu, nego ih sve treba prvo skupiti u neko polje.
Naravno da znakove ne može filtrirati ako nije taj dio niza prošao kroz petlju, ili bar ja ne znam za takav metod, međutim on je napisao da ne smije izvlačiti broj po broj, pa slijedom toga predpostavljam da je broj u komadu, pa sam išao tražiti indekse aritmetikom pokazivača.
A ako izvlačiš sve znakove od x do y - to je ponovno izvlačenje broj po broj.
Ovo je u stvari traženje substringa u određenom intervalu. Svejedno, ta petlja se kao dodatni korak može staviti i filtrirati interval od + do k, ali ja je nisam namjerno stavio, mislim da nije naglasak na tome, pa sam to preko indeksa išao.
A ako izvlačiš sve znakove od x do y - to je ponovno izvlačenje broj po broj.
Ne nužno, možeš koristiti memcpy i strncpy...
(osim ako ne računaš i ono da i memcpy i strncpy izvlače bajt po bajt) :D
A ako izvlačiš sve znakove od x do y - to je ponovno izvlačenje broj po broj.
Ne nužno, možeš koristiti memcpy i strncpy...
(osim ako ne računaš i ono da i memcpy i strncpy izvlače bajt po bajt) :D
memcpy bi radio kao i moj primjer, preko računanja pozicije indeksa, od pozicije prvog broja broj mjesta brojeva source niza, a broj mjesta brojeva dobiješ artitmetikom pokazivača, a ne prolaskom kroz petlju.
memcpy bi radio kao i moj primjer, preko računanja pozicije indeksa, od pozicije prvog broja broj mjesta brojeva source niza, a broj mjesta brojeva dobiješ artitmetikom pokazivača, a ne prolaskom kroz petlju.
Pa naravno, ne bi valjda s njime kopirao svaki znak posebno.
memcpy bi radio kao i moj primjer, preko računanja pozicije indeksa, od pozicije prvog broja broj mjesta brojeva source niza, a broj mjesta brojeva dobiješ artitmetikom pokazivača, a ne prolaskom kroz petlju.
Pa naravno, ne bi valjda s njime kopirao svaki znak posebno.
Poanta je u tom da se broj mjesta brojeva potreban za izračun veličine novog niza ne dobije prolaskom kroz petlju, ili nadodavanjem brojeva u petlji direktno u novi niz iz source niza, nego aritmetikom pokazivača. Tako se iz source niza ne izvlači broj po broj, nego cijeli blok brojeva odjednom, a to je napisao u zadatku, ako mi se dobro čini, ili ako sam ja to dobro shvatio, svejedno.
Inače kod zadataka ovog tipa se daje po tri input - outputa, pa stvari izgledaju jasnije.
ma oba su rjesenja tocna, samo je drugi malo napredniji, ako je jos u skoli, zadatak se moze rijesiti na jos barem 5 "pocetnickih" nacina, napisao je da mu treba za skolu tako da...
oblik:
STUDENTSKA IZKAZNICA
IME: IVO IVEC
PREZIME: Ivic
BROJ: T34578999
Studentski BROJ može sadržavati slova , treba tretirati kao string. Tu je dopušteno da imaju dva studentske imena ili dva prezimena odvojena razmakom. ostali posebni znakovi nisu dopušteni.Program bi trebao prikazati ime i prezime, tako da (bez obzira na ulazak) sva slova u imenu su velika i prezime i prvo slovo veliko, a svi ostali slova su mala. Sva slova u broju studenata (uključujući i one koji nisu na početku) trebalo bi se pri izpisu pretvoriti u velika slova.
oblik:
STUDENTSKA IZKAZNICA
IME: IVO IVEC
PREZIME: Ivic
BROJ: T34578999
Studentski BROJ može sadržavati slova , treba tretirati kao string. Tu je dopušteno da imaju dva studentske imena ili dva prezimena odvojena razmakom. ostali posebni znakovi nisu dopušteni.Program bi trebao prikazati ime i prezime, tako da (bez obzira na ulazak) sva slova u imenu su velika i prezime i prvo slovo veliko, a svi ostali slova su mala. Sva slova u broju studenata (uključujući i one koji nisu na početku) trebalo bi se pri izpisu pretvoriti u velika slova.
jesi li se to došao hvaliti sa onime što trebaš napraviti ili što?
jesi li probao bar nešto sam - u 1. zadatku trebaš napraviti jednu for petljicu i dvije male metodice - ta cijeli zadataka se riješi u 7 linija koda
a drugi je rad sa stringovima - isto peace of cake, guglaj tipa kako da pretvoriš string u caps lock, first letter big itd
I ja mislim.
No, što je tu teško? Dva veoma lagana primjera koja su već u ovoj temi rješavana do besvijesti. Trebaš pomoć? Može, pokaži kod koji si do sada napravio i reci što ne znaš dalje...
Kako da nadjem koliko se puta ponavlja zadani string1 u zadanom stringu2??
Hmm, pa ja bi to napravio tako da inizijaliziras jedan brojac=0, setas po stringu2, i svaki put kad naletis na string1 uvecas brojac za +1. Uploadaj sto si napravio dosad, pa da ti popravimo, da li ti je to za faks skolu?
