如何在c++中不使用std::string,也不使用任何STL,将复数存储在字符数组中

How to store complex number in a character array in c++ without using std::string, nor any STL?

本文关键字:数组 存储 STL 字符 string c++ std 任何      更新时间:2023-10-16

我希望将2个整数作为用户说5和6的输入,并需要将其存储为一个复数,即5 + i6中的字符数组。条件是不能使用string和ccomplex库。

我不想打印它,因为我不想做这样的事情:

char x= 5+'/0';
char y= 6+'/0';
cout<< x << " i"<<y;

而是与以下内容等价的内容:

char x[10]= "5 +i6";

如果你不能使用string,那么我猜你不能使用std::stringstream。回到snprintf(buf, sizeof buf, "%d + i%d", 5, 6)

不能使用std::string。问题是,设置问题的人为什么要传递字符串数据?不允许std::string是完全合理的,但是您是否有自己的类,您是否使用调用者提供的固定缓冲区的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("answerswer, sz+1, fmt, real, imaginary); 
   return answer;   
}