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

时间:2014-10-15 10:50:28

标签: c++ arrays string

我有这两组char数组:

  char t1[]={'1','2','\0','\0'};
  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。

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

2 个答案:

答案 0 :(得分:6)

您可以通过引用获取数组。如果您只对大小为4的数组感兴趣:

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

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

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

答案 1 :(得分:1)

如果您知道字符数组的长度,我建议您使用以下内容:

#include <string>
#include <iostream>

std::string sconvert(const char *pCh, int arraySize){
  std::string str;
  if (pCh[arraySize-1] == '\0') str.append(pCh);
  else for(int i=0; i<arraySize; i++) str.append(1,pCh[i]);
  return str;
}

int main(){
  char t1[]={'1','2','\0','\0'};
  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;
}