如何在c++中正确地将char数组转换为字符串

how to correctly converting char array to string in c++

本文关键字:数组 char 转换 字符串 正确地 c++      更新时间:2023-10-16

我有这两组字符数组:

  char t1[]={'1','2','',''};
  char t2[]={'1','2','3','4'};

我想写一个函数将它们转换为字符串,但t1的字符串大小应该是2,t2的字符串大小应是4。

 string convert(char * data)
 {
      return string(data);
 }

在t1时做得很好,但在t2时崩溃(t2不是空终止的)。

 string convert(char * data)
 {
      return string(data,data+4);
 }

对t2做得很好,但对t1生成字符串的大小是4而不是2。

编写一个简单快速的函数以正确执行此操作的最佳方法是什么?

您可以通过引用获取数组。如果你只对4号阵列感兴趣:

std::string convert(char const(&data)[4])
{
   return std::string(data, std::find(data, data + 4, ''));
}

如果你想要更通用的东西,你可以把它作为一个模板:

template<size_t N>
std::string convert(char const(&data)[N])
{
   return std::string(data, std::find(data, data + N, ''));
}

如果你知道字符数组的长度,我可以建议你如下:

#include <string>
#include <iostream>
std::string sconvert(const char *pCh, int arraySize){
  std::string str;
  if (pCh[arraySize-1] == '') str.append(pCh);
  else for(int i=0; i<arraySize; i++) str.append(1,pCh[i]);
  return str;
}
int main(){
  char t1[]={'1','2','',''};
  char t2[]={'1','2','3','4'};
  std::string str = sconvert(t1, 4);
  std::cout << str << " : " << str.size() << std::endl;
  str = sconvert(t2, 4);
  std::cout << str << " : " << str.size() << std::endl;
}