Kezdőoldal » Számítástechnika » Programozás » [C++] Mi a hiba ebben az atoi...

Qaxqaxqax kérdése:

[C++] Mi a hiba ebben az atoi () -val?

Figyelt kérdés

Valamiért rosszul konvertálok:S Tudna valaki segíteni? (Am a program két kettesszámrendszerbeli számot ad össze.)


#include <iostream>

#include <vector>

#include <cstdlib>


using namespace std;


void str_beker(string &x, string szam);

void resize(string &x, string &y);

void sum(string x, string y, string &z);


int main()

{

string x,y;

str_beker(x,"elso");

str_beker(y,"masodik");

resize(x,y);

sum(x,y,z);

cout<<z<<endl;

return 0;

}


void str_beker(string &x, string szam){

cout<<"Add meg a(z) "<<szam<<" szamot!"<<endl;

getline(cin,x);

}

void resize(string &x, string &y){

if(x.size()>y.size()){

y.insert(0,x.size()-y.size(),'0');

}else if(y.size()>x.size()){

x.insert(0,y.size()-x.size(),'0');

}

}

void sum(string x, string y, string &z){

int atv=0;

for(int i=0;i<x.size()+1){

z[i]="0";

}

for(int i=x.size();i>0;i--){

if(atoi(x[i].c_str())+atoi(y[i].c_str())+atv==0){

z[i]="0";

atv=0;

}else if(atoi(x[i].c_str())+atoi(y[i].c_str())+atv==1){

z[i]="1";

atv=0;

}else if(atoi(x[i].c_str())+atoi(y[i].c_str())+atv==2){

z[i]="0";

atv=1;

}else if(atoi(x[i].c_str())+atoi(y[i].c_str())+atv==3){

z[i]="1";

atv=1;

}

}

if(z[z.size()-1]=="0"){

z.erase(z.size()-1,1);

}

}


A helpért előre is köszi(:



2013. nov. 4. 15:24
1 2
 1/11 iostream ***** válasza:
45%

Ránézésre sem fordul le. A hibaüzenet elég beszédes lehet. Elemezzünk!

x[i].c_str()

Mi is ez a kifejezés? Van benne x, ami string, van benne i, ami int, van benne egy operator[] ami az egyes karaktereket éri el a stringben és van benne c_str, ami memberfüggvénynek néz ki. Minek van c_str memberfüggvénye? Például a stringnek. Mi az x[i] típusa? Lásd fent: karakter. Van a karakternek c_str függvénye? Nincs, nem osztály, nincs memberfüggvénye.

A megoldás itt lesz: hogy csinálsz '0' és '1' karakterekből 0-t és 1-t? Sok módja van, találj ki egyet. Az atoi-t meg felejtsd el ehhez a feladathoz.

2013. nov. 4. 15:37
Hasznos számodra ez a válasz?
 2/11 A kérdező kommentje:
Köszi, hogy segítettél értelmezni, akkor már csak egy karakterkonverziós függvény kell x.x
2013. nov. 4. 15:57
 3/11 A kérdező kommentje:

Ha valaki még erre járna:

Átalakítottam tűrhetőre, lefut, viszont valamiért elakad, valami tipp?

#include <iostream>


using namespace std;


void str_beker(string &x, string szam);

void resize(string &x, string &y);

void sum(string x, string y, string &z);


int main()

{

string x,y,z;

str_beker(x,"elso");

str_beker(y,"masodik");

resize(x,y);

sum(x,y,z);

cout<<z<<endl;

return 0;

}


void str_beker(string &x, string szam){

cout<<"Add meg a(z) "<<szam<<" szamot!"<<endl;

getline(cin,x);

}

void resize(string &x, string &y){

if(x.size()>y.size()){

y.insert(0,x.size()-y.size(),'0');

}else if(y.size()>x.size()){

x.insert(0,y.size()-x.size(),'0');

}

}

void sum(string x, string y, string &z){

//charcode 48->0 49->1

int atv=0;

for(int i=0;i<x.size()+1;i++){

z[i]+='0';

}

for(int i=x.size();i>0;i--){

if((x[i]-48)+(y[i]-48)+atv==0){

z[i]='0';

atv=0;

}else if((x[i]-48)+(y[i]-48)+atv==1){

z[i]='1';

atv=0;

}else if((x[i]-48)+(y[i]-48)+atv==2){

z[i]='0';

atv=1;

}else if((x[i]-48)+(y[i]-48)+atv==3){

z[i]='1';

atv=1;

}

}

if(atv==1){

z[0]='1';

}else{

z.erase(0,1);

}

}

2013. nov. 4. 16:37
 4/11 iostream ***** válasza:
45%
A z egy üres string. Töltsd fel x.size()-nyi nullával például.
2013. nov. 4. 17:44
Hasznos számodra ez a válasz?
 5/11 iostream ***** válasza:
45%
Ja hülye vagyok, az megvan. Akkor: debuggolj :)
2013. nov. 4. 17:44
Hasznos számodra ez a válasz?
 6/11 A kérdező kommentje:
Háth ezaz hogy valamiért közbe meghalD:
2013. nov. 4. 20:07
 7/11 iostream ***** válasza:
Debuggolás legparasztabb módja: telerakod a kódot kiiratásokkal, és akkor nagyjából látod, hol hal el. Próbáld ki, nagyon hasznos tud lenni.
2013. nov. 4. 20:57
Hasznos számodra ez a válasz?
 8/11 A kérdező kommentje:
Én is ezt szoktam csak az a problem, hogy a cout<<z<<endl; sor elé a main-ben kitettem, hogy cout<<"alma"<<endl; és kiírta az almát szal lol.
2013. nov. 4. 21:12
 9/11 iostream ***** válasza:

Próbáld egyrészt cerr-el kiírni (az nem buffereli a kiírást), másrészt a ciklusodban x.size()-tól indul az i, és te megindexeled x-t i-vel, ez biztos, hogy túlindexelés.


Ez meg:

if(z[z.size()-1]=="0"){

soha nem lesz igaz, chart hasonlítasz char[]-vel, le se kéne fordulnia.

2013. nov. 4. 23:31
Hasznos számodra ez a válasz?
 10/11 anonim válasza:

Nagyon nemmélyedtem bele a kódodba, de ha string "változót" használsz, szerintem ez biztosan hiányzik:


#include <string>


Introduction to strings

[link]

2013. nov. 6. 19:54
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!