Hi everyone,

Somewhere in my need i need to create strings like ( x,y,z ) with 0<x,y,z<N.
I was trying to use 3 for loops but it didn't work.
That's what i wrote:

`````` for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
for(int k=0;k<N;k++){
string t="( ";

t+=i;
t+=",";
t+=j;
t+=",";
t+=k;
t+=" )";
}
}
}
``````

I know the reason is that i,j,k are integers and it's not possible to add integers to a string.
So i tried to convert integers into char and then add them to the string.

by writing:

``````for(i=0;i<N;i++){
for(int j=0;j<N;j++){
for(int k=0;k<N;k++){
string t="( ";
char* newi,newj,newk;
newi=itoa (i);
newk=itoa (k);
newj=itoa (j);
t+=newi;
t+=",";
t+=newj;
t+=",";
t+=newk;
t+=" )";

}
}
}
``````

But that gives me this error:
error: 'itoa' was not declared in this scope

Can anybody tell me how i can do that?

Do you mean like this?

``````for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
for(int k=0;k<N;k++){
string t="( ";

t+=i;
t+=",";
t+=j;
t+=",";
t+=k;
t+=" )";
}
}
}``````

I know the reason is that i,j,k are integers and it's not possible to add integers to a string.
So i tried to convert integers into char and then add them to the string.

by writing:

``````for(i=0;i<N;i++){
for(int j=0;j<N;j++){
for(int k=0;k<N;k++){
string t="( ";
char* newi,newj,newk;
newi=itoa (i);
newk=itoa (k);
newj=itoa (j);
t+=newi;
t+=",";
t+=newj;
t+=",";
t+=newk;
t+=" )";

}
}
}``````

But that gives me this error:
error: 'itoa' was not declared in this scope

Can anybody tell me how i can do that?

Try this.

``````char temp = new char;
string test;
//when you're done delete it.
delete temp;``````

Or use stringstream:

``````stringstream out;
out << 3;
string test=out.str();``````

error: 'itoa' was not declared in this scope

to use itoa ensure you include cstdlib (see below)

``#include <cstdlib>``

this should solve the problem allowing you to += the chars into the string

to nbaztec i tried to use the first way you suggested me by writting:

``````#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <string>
#include <cstring>

//using std::cout;
//using std::string;

using  namespace std;

int main()
{
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
for(int k=0;k<5;k++){
string t="( ";
char newi= new char;
char newj= new char;
char newk= new char;

t+=itoa (i,newi,10);
t+=",";
t+=itoa (i,newj,10);
t+=",";
t+=itoa (i,newk,10);
t+=" )";
delete newi;
delete newj;
delete newk;
cout<<t<<endl;
}
}
}
}``````

But i got this errors:

checkpositionmaker.cpp:20: error: invalid conversion from 'char*' to 'char'
checkpositionmaker.cpp:21: error: invalid conversion from 'char*' to 'char'
checkpositionmaker.cpp:22: error: invalid conversion from 'char*' to 'char'
checkpositionmaker.cpp:24: error: 'itoa' was not declared in this scope
checkpositionmaker.cpp:30: error: type 'char' argument given to 'delete', expected pointer
checkpositionmaker.cpp:31: error: type 'char' argument given to 'delete', expected pointer
checkpositionmaker.cpp:32: error: type 'char' argument given to 'delete', expected pointer

Can you see why that happend?

To Kanoisa: Thanks for your help but I'd already #include <cstdlib> in my code.

Rather than use itoa which is non-standard try nbaztec's stringstream method:
(portions omitted)

``````#include <sstream>
//...
std::stringstream ss;
for
{
for
{
for
{
ss.str("");
ss<<i<<","<<j<<","<<k;
std::cout<<ss.str()<<std::endl;
}
}
}``````

Oh! Gracias. I'm terribly sorry, I didn't notice. I ommited the * from my code.

``````char [B]*[/B]temp = new char;
string test;
//when you're done delete it.
delete temp;``````

Though it is nice to know what other options you have, the best would be to stick with sstream.

Also, you're allocating & deallocating memory inside a loop. This is rather not required & in future projects will prove to be a serious speed issue. You can just declare 1 *temp & re-use it then delete it in the end. All outside a loop. This is just an advice as I'd rather suggest you go with sstream.

``````char *newi= new char;
char *newj= new char;
char *newk= new char;
.
.
delete newi;
delete newj;
delete newk;``````

Thanks a lot nbaztec and jonsca . I used sstream and It works now.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of 1.18 million developers, IT pros, digital marketers, and technology enthusiasts learning and sharing knowledge.