» »

C++ niz,izpis

C++ niz,izpis

Miko55 ::

POzdravljeni !

Naloga je da program izpiše vneseno besedilo obratno,npr. : danes je lepo vreme---->lepo vreme je danes.
Delujoča koda je taka:
#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    string niz, niz2;
    
    cout << "Vnesi niz: ";
    getline(cin, niz);   // vnesemo celoten niz, v string spremenjlivko
    
    cout << endl << niz << endl;
    
    for (int temp=niz.length(), i=niz.length(); i>=0; i--) // zanka gre od konca niza do zacetka
    {
        if (niz[i] == ' ')  // pogledamo ce je niz[i] prazen znak oz. presledek
        {
              for (int j=i; j<=temp; j++) // ce smo pri prejsnem if naleteli na presledek gremo do prejsnjega presledka. Prejsnji presledek je shranjeni v spremenljivki temp
              {
                  if (niz[j]!= ' ')  // ce trenutno znak ni presledek shranimo crke (besedo) v nov niz2
                     niz2 += niz[j];
              }        
              
              niz2 += " "; // dodamo presledek
              temp = i;  // shranimo mesto presledka, za prejsni presledek
        }
        else if (i==0)  // ko pridemo do konca moramo izpisati se zadnjo besedo, ker na zacetko ni presledka zato se zgornji if ne izvede
        {
             for (int j=0; j<=temp; j++)  // spret gremo do prejsnjega presledka
             {
                 niz2 += niz[j];
             }
        }
    }
    
    cout << niz2 << endl;
    return 0;


Jaz hočem narediti z char ne z string potem se nekoliko vse spremeni glede dolzine itd. Program imam narejeno ampak izpiše samo eno besedo drugih pa ne,pa bi prosil če lahko kdo popravi napako.
Moja koda:
#include <iostream>
#include <cstring>
#include <string>
using namespace std;

int main()
{
    char niz[20],niz2[20];
    int dolzina,k=0;
    
    cout<<"Vnesi besedilo: ";
    cin.getline(niz,20);
    
    cout << endl << niz << endl;
    dolzina=strlen(niz);
    int temp=dolzina;
    for (int i=dolzina; i>=0; i--)
    {
		 if (niz[i] == ' ')
		 {
			 for (int j=i; j<=temp; j++) // ce smo pri prejsnem if naleteli na presledek gremo do prejsnjega presledka. Prejsnji presledek je shranjeni v spremenljivki temp
              {
                  if (niz[j]!= ' '){   // ce trenutno znak ni presledek shranimo crke (besedo) v nov niz2
                     niz2[k] = niz[j];
                     k++;
                     }
              }        
              
              niz2[k+1] = ' '; // dodamo presledek
              temp = i;  // shranimo mesto presledka, za prejsni presledek
		 }
		 else if (i==0)  // ko pridemo do konca moramo izpisati se zadnjo besedo, ker na zacetko ni presledka zato se zgornji if ne izvede
         {
             for (int j=0; j<=temp; j++)  // spret gremo do prejsnjega presledka
             {
                 niz2[k] = niz[j];
             }
		 }
    }
    
    cout << niz2 << endl;
    return 0;
}

Senitel ::

V naslovu imaš C++, torej uporabljaj C++ in ne C. Ne izumljat tople vode tam kjer ni treba.

Zgodovina sprememb…

  • spremenil: Senitel ()

Miko55 ::

Senitel je izjavil:

V naslovu imaš C++, torej uporabljaj C++ in ne C. Ne izumljat tople vode tam kjer ni treba.


To kodo sem dobil od nekoga,ki že študira,ter nisem vedel da je C. Ampak jaz še vseeno rabim nekoga ki bi mi pomagal z drugo kodo,da bi delovala.

Zgodovina sprememb…

  • spremenil: Miko55 ()

Yacked2 ::

Kaj je pa to problem? Razbij najprej na posamezne besede in potem znotraj posameznega arraya na posamezne črke. Potem se lahko igraš kolikor hočeš
Korak naprej ni vedno ustrezen...sploh če si na robu prepada!

Senitel ::

Saj ni čist C (nedelujoča koda)... Je neka glupa kombinacija C in C++ (uporabljaš io streame, nočeš uporabljat stringov). Mene osebno ob takih prime, da bi nalimal rešitev z inline assemblyem.

Miko55 ::

Senitel je izjavil:

Saj ni čist C (nedelujoča koda)... Je neka glupa kombinacija C in C++ (uporabljaš io streame, nočeš uporabljat stringov). Mene osebno ob takih prime, da bi nalimal rešitev z inline assemblyem.


Sem še na osnovah,tisti include string je odveč,kar se pa ostalega tiče pa se mi tako učimo (2.letnik).

Miko55 ::

Yacked2 je izjavil:

Kaj je pa to problem? Razbij najprej na posamezne besede in potem znotraj posameznega arraya na posamezne črke. Potem se lahko igraš kolikor hočeš


Jah fora je da naj bi se naredilo z presledki,jaz imamo to nekako narejeno ampak ne vem zakaj mi izpiše samo zadnjo besedo drugih pa ne.

Yacked2 ::

Miko55 je izjavil:

Yacked2 je izjavil:

Kaj je pa to problem? Razbij najprej na posamezne besede in potem znotraj posameznega arraya na posamezne črke. Potem se lahko igraš kolikor hočeš


Jah fora je da naj bi se naredilo z presledki,jaz imamo to nekako narejeno ampak ne vem zakaj mi izpiše samo zadnjo besedo drugih pa ne.


Daj napiši primer teksta kako bi ti obrnilo.
Korak naprej ni vedno ustrezen...sploh če si na robu prepada!

Miko55 ::

Yacked2 je izjavil:

Miko55 je izjavil:

Yacked2 je izjavil:

Kaj je pa to problem? Razbij najprej na posamezne besede in potem znotraj posameznega arraya na posamezne črke. Potem se lahko igraš kolikor hočeš


Jah fora je da naj bi se naredilo z presledki,jaz imamo to nekako narejeno ampak ne vem zakaj mi izpiše samo zadnjo besedo drugih pa ne.


Daj napiši primer teksta kako bi ti obrnilo.


Uporabnik vpiše:

zunaj je 10 stopinj Celzija

Program izpiše:

Celzija stopinj 10 je zunaj

Meni bi v mojem nedelujočem programu izpisalo Celzija drugo pa ne

Zgodovina sprememb…

  • spremenil: Miko55 ()

Yacked2 ::

Miko55 je izjavil:

Yacked2 je izjavil:

Miko55 je izjavil:

Yacked2 je izjavil:

Kaj je pa to problem? Razbij najprej na posamezne besede in potem znotraj posameznega arraya na posamezne črke. Potem se lahko igraš kolikor hočeš


Jah fora je da naj bi se naredilo z presledki,jaz imamo to nekako narejeno ampak ne vem zakaj mi izpiše samo zadnjo besedo drugih pa ne.


Daj napiši primer teksta kako bi ti obrnilo.


Uporabnik vpiše:

zunaj je 10 stopinj Celzija

Program izpiše:

Celzija stopinj 10 je zunaj

Meni bi v mojem nedelujočem programu izpisalo Celzija drugo pa ne


ok, ker c++ nepoznam ti lahko napišem v phpju XD
<?php

$niz = "Zunaj je 10 stopinj Celzija"; //podan niz
$besede = explode(" ", $niz); //razcepimo na besede

for ($i= count($besede)-1; $i >= 0;$i--) //sprehodimo se skozi besede od zadaj naprej
{
    if ($i=0) //če smo pri zadnji besedi nerabimo presledka za besedo
    {
    echo $besede[0];
    }
    else //drugače pa za besedo izpišemo še presledek
    {
    echo $besede[$i] + " ";
   }

}
?>


Kode nisem zaganjal, sem jo spisal iz glave, ampak princip je tak. Če rabiš pa c++ pa php preoblikuj v funkcijo in jo kliči znotraj c++
Korak naprej ni vedno ustrezen...sploh če si na robu prepada!

Zgodovina sprememb…

  • spremenil: Yacked2 ()

Miko55 ::

Hvala za trud,ampak php-ja bomo imeli šele drugo leto. Glede principa jaz razumem kako bi naj delovalo,ampak nekako ne razumem zakaj mi ne gre zato bi rabil nekoga ki bi popravil :)

Zgodovina sprememb…

  • spremenil: Miko55 ()

mallard ::

Si probal it skozi kodo z debuggerjem, da vidiš do kam pride zanka in kaj se ti piše v spremenljivke?

Namig: Konec niza, ki ga vneseš, je označen z '\0' (NUL). temp imaš na začetku nastavljen točno na to mesto.

Miko55 ::

Mallard,bi mi mogoče lahko odgovoril na ZS ? Drugače pa ne vem kaj je mišljeno z \0 ,ker sem še začetnik sploh pa v nizih :).

black ice ::

http://www.cplusplus.com/reference/stri...
String je polje charov (črk). Na koncu vsebuje \0 (null termination sign), ki označuje konec stringa.
Več najdeš tule: Null-terminated string @ Wikipedia

Miko55 ::

Nočem sedaj bit len ali nekaj,ampak bi vseeno da bi mi kdo popravil program,ne pa svetoval,čeprav je tudi to dobrodošlo :)

Miko55 ::

Ja problem je bil v tej \0,najlepša hvala za namig/nasvet :)

boogie_xlr ::

#include <iostream>
#include <stack>
#include <string>
#include <sstream>

using namespace std; //ne me kregat...

int main(int argc, char** argv)
{
	cout << "Vnesi stavek:" << endl;
	string line;
	getline(cin, line);
	stringstream sstream;
	sstream << line;
	stack<string> sklad;
	while (!sstream.eof())
	{
		string word;
		sstream >> word;
		sklad.push(word);
	}
	while (!sklad.empty())
	{
		cout << sklad.top();
		if (sklad.size() > 1)
		{
			cout << " ";
		}
		sklad.pop();
	}
	cout << endl;
	return 0;
}

BigWhale ::

Jaz bi prosil so-forumase, da naj ne podajajo celotnih resitev za domace naloge. Cez nekaj let bomo imeli zarad teh zadev povsem nepotrebne guzve na razgovorih, ko bomo iskali nove sodelavce. ;>

roba87 ::

Samo majhna opazka. Char je polje znakov in ne polje črk, lahko shranimo tudi števila in vse ostalo, toliko da ne bomo površni.

Zgodovina sprememb…

  • spremenil: roba87 ()

BigWhale ::

Ce ze nocemo biti povrsni, potem povejmo, da je char najmanjsi podatkovni tip v Cju, dolg tocno en byte in da vanj lahko shranis 256 razlicnih vrednosti. In vsekakor ni polje crk. :)

black ice ::

BigWhale je izjavil:

Ce ze nocemo biti povrsni, potem povejmo, da je char najmanjsi podatkovni tip v Cju, dolg tocno en byte in da vanj lahko shranis 256 razlicnih vrednosti. In vsekakor ni polje crk. :)

Polje znakov, v njegovem primeru so s temi znaki zajete zgolj črke. Če že nočemo biti površni (kar sem zapisal že zgoraj).

D-monLord ::

Ce ne znas drugace razbij problem na vec kosov.

1. Preberi string iz inputa
2. Spremeni input string v string array, kjer je split char presledek.
'danes je lep dan' => ['danes', 'je', 'lep', 'dan']
3. Naredi inverse arraya stringov
['danes', 'je', 'lep', 'dan'] => ['dan', 'lep', 'je', 'danes']
4. Spremeni array stringov v string, kjer med besede das char presledek.
['dan', 'lep', 'je', 'danes'] => 'dan lep je danes'
5. Izpisi string na ekran

Ponavad dajo za taksne resitve 10 na faksu ali 5 v srednji, ker je stvar pregledna.

BigWhale ::

black ice je izjavil:

BigWhale je izjavil:

Ce ze nocemo biti povrsni, potem povejmo, da je char najmanjsi podatkovni tip v Cju, dolg tocno en byte in da vanj lahko shranis 256 razlicnih vrednosti. In vsekakor ni polje crk. :)

Polje znakov, v njegovem primeru so s temi znaki zajete zgolj črke. Če že nočemo biti površni (kar sem zapisal že zgoraj).


Char ni nobeno polje, char je char
char foo;


Ce nareds pa:
char foo[25];

Imas pa char array, ki je dolg 25 char-ov (kar je v Cju 25 bytov).
V C++ imas pa se string, ki je pa svoj podatkovni tip in ni enak polju znakov.

Kompliciram? Ja, ampak ce bi se radi igrali v Cju in C++, potem morate komplicirati in vedeti kaksne so te razlike.

black ice ::

Razlika mi je jasna kot beli dan. Prosim preberi si še enkrat post, v katerem sem razlagal kaj je string, ker fantu ni bilo jasno. Potem je vmes pokomentiral roba87 in na koncu so iz vsega tega nastale klobase. :D
Tale komentar se navezuje na tega
Bom drugič citiral, da bo bolj jasno.

Datadog ::

Look ma no loops! j/k

#include <vector>
#include <algorithm>
#include <string>
#include <iostream>
#include <sstream>
#include <iterator>

using std::vector;
using std::copy;
using std::string;
using std::istream_iterator;
using std::back_inserter;
using std::istringstream;
using std::ostream_iterator;


int main()
{
	    
	string sentence = "danes je lepo vreme";
    
	istringstream iss(sentence);

	vector<string> tokens;
	
	copy(istream_iterator<string>(iss),istream_iterator<string>(), back_inserter<vector<string> >(tokens));

	copy(tokens.rbegin(), tokens.rend(), ostream_iterator<string>(std::cout, " "));		
	
	return 0;
}

BigWhale ::

black ice je izjavil:

Razlika mi je jasna kot beli dan. Prosim preberi si še enkrat post, v katerem sem razlagal kaj je string, ker fantu ni bilo jasno. Potem je vmes pokomentiral roba87 in na koncu so iz vsega tega nastale klobase. :D
Tale komentar se navezuje na tega
Bom drugič citiral, da bo bolj jasno.


Pomesal si vse. String je v C++ precej natancno definiran, kot svoj podatkovni tip in nima z null terminated stringi prav nobene povezave.

V postu, ki sem ga jaz komentiral si pa ti rekel: "char je polje znakov". In to ne drzi, pa na karkoli se ze navezuje. :) char je char in ni polje.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Zračni tlak in vreme

Oddelek: Znanost in tehnologija
196184 (5585) mitja73
»

Kako daleč vidimo...

Oddelek: Loža
174141 (3264) Matev
»

C++ 2 NALOGI

Oddelek: Programiranje
121000 (768) Tutankhamun
»

slovenščinaaaa

Oddelek: Šola
201532 (1030) tilinho20
»

AC odsek pri Vrhniki - neznosen smrad

Oddelek: Loža
112641 (2171) SkIDiver

Več podobnih tem