C++ 如何在c++;不使用std::string,也不使用任何STL?
我希望从用户(比如5和6)处获取2个整数作为输入,并需要将其存储为复数,即字符数组中的5+i6。条件是我不能使用string和ccomplex库 我不想打印它,因为我不想做这样的事情:C++ 如何在c++;不使用std::string,也不使用任何STL?,c++,C++,我希望从用户(比如5和6)处获取2个整数作为输入,并需要将其存储为复数,即字符数组中的5+i6。条件是我不能使用string和ccomplex库 我不想打印它,因为我不想做这样的事情: char x= 5+'/0'; char y= 6+'/0'; cout<< x << " i"<<y; 如果不能使用string,那么我想就不能使用std::stringstream。所以回退到snprintf(buf,sizeof buf,“%d+i%d”,5,6) 不能
char x= 5+'/0';
char y= 6+'/0';
cout<< x << " i"<<y;
如果不能使用string,那么我想就不能使用std::stringstream。所以回退到snprintf(buf,sizeof buf,“%d+i%d”,5,6) 不能使用std::string。所以问题是为什么,以及设置问题的人希望字符串数据如何传递?不允许std::strings是完全合理的,但您是否有自己的类,是否使用调用方提供的具有固定缓冲区的C字符串,或者是否传递分配给malloc()的C字符串。还有其他可能的替代方案 如果你有自己的字符串类,我们不能不看就回答。填充调用方提供的C缓冲区
/* return 0 on success, -1 if buffer too small */
int toString(char *buff, int N, int real, int imaginary)
{
int sz = snprintf(buff, N, "%d + %di", real, iamginary);
if(sz > N-1)
return -1;
return 0;
}
传递分配给malloc的字符串
/* return a string allocated with malloc */
char *toString(int real, int imaginary)
{
int sz;
char *answer = 0;
const char *fmt = "%d + %di";
sz = snprintf(0, 0, fmt, real, imaginary);
answer = malloc(sz + 1);
if(answer)
snprintf("answer, sz+1, fmt, real, imaginary);
return answer;
}
您可以创建自己的类并使用它吗?是的,我可以这样做。然后您可以创建一个将值存储为成员数据的类,并从中构造一个数组。或者只是读入整数,然后从中构造一个数组。我实际上打算这样做,但很难从data membersAh构造一个数组。您是否可以使用标准库的成员,只要他们不是标准模板库的一部分?因为如果你是的话,
snprintf()
就是你想要的,就像Benoît在回答中说的那样。它不打印到标准输出,而是打印到第一个参数,即char*
(包括char
数组)。谢谢!非常简单,一旦你知道像这样的存在感谢详细的解释!
/* return a string allocated with malloc */
char *toString(int real, int imaginary)
{
int sz;
char *answer = 0;
const char *fmt = "%d + %di";
sz = snprintf(0, 0, fmt, real, imaginary);
answer = malloc(sz + 1);
if(answer)
snprintf("answer, sz+1, fmt, real, imaginary);
return answer;
}