读取文件时如何将字符串转换为字符数组?

Posted

技术标签:

【中文标题】读取文件时如何将字符串转换为字符数组?【英文标题】:How do I convert string to char array when reading a file? 【发布时间】:2014-12-13 09:49:37 【问题描述】:

我想将输入文件中的字符串转换为字符数组来标记文件。这段代码可能还有其他问题,但现在,编译器说“将‘const char*’分配给‘char [100]’时的类型不兼容”。

string filename = "foo.txt";
ifstream data(filename.c_str());
string temp;
char str[100];
char* pch;
while (getline(data, temp))
    str = temp.c_str();
    pch = strtok(str, " ,.");
    while (pch != NULL)
        cout << pch << endl; //Or something else, Haven't gotten around to this part yet.
        pch = strtok (NULL, " ,.");
    

【问题讨论】:

你为什么不用std::string 你如何设法使用带一个参数的strcpy函数? @πάνταῥεῖ 因为我已经写过“使用命名空间 std;”在包括库之后。 @Mohit_Bhasi 抱歉,我实际上使用了 c_str()。这只是一个试验。 @FatimaTariq 我的意思不是省略命名空间限定符(顺便说一句,这是不鼓励的),我的意思是你为什么不使用它来分割成部分? strtok() 是一个危险的功能,不应使用。请参阅How to split a string in C++。 【参考方案1】:

我知道这并不能回答你的问题,但答案确实是:换一种方式去做,因为如果你继续做你正在做的事情,你将进入一个受伤的世界......

您无需任何幻数或原始数组即可处理此问题:

const std::string filename = "foo.txt";
std::ifstream data(filename.c_str());
std::string line;
while(std::getline(data, line)) // #include <string>

  std::string::size_type prev_index = 0;
  std::string::size_type index = line.find_first_of(".,");
  while(index != std::string::npos)
  
    std::cout << line.substr(prev_index, index-prev_index) << '\n';
    prev_index = index+1;
    index = line.find_first_of(".,", prev_index);
    std::cout << "prev_index: " << prev_index << " index: " << index << '\n';
  
  std::cout << line.substr(prev_index, line.size()-prev_index) << '\n';

此代码不会赢得任何节拍或效率竞赛,但它肯定不会因意外输入而崩溃。 Live demo here (using an istringstream as input instead of a file).

【讨论】:

以上是关于读取文件时如何将字符串转换为字符数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何把一个json文件转换成字符串

PHP使用自定义键将字符串数组转换为二维数组

C#如何将OBJECT转换成数组

将命令行参数转换为字符串

如何将零终止字节数组转换为字符串?

在此算法中将字节数组转换为字符串时出错[重复]