如何用直引号C ++替换特殊引号

时间:2017-10-04 06:15:04

标签: c++ xcode csv parsing

例如,我正在解析的文件包含unicode char u201d ie。 “(重音报价)

如何用"替换它? (直引)?

1 个答案:

答案 0 :(得分:0)

使用c ++和STL我会使用这样的代码,你仍然需要保存到输出缓冲区到文件..在linux上测试。

#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>

// load file data
char* load_file(const char *filename)
{
    FILE *fp;

    fp = fopen(filename, "r");
    if (!fp)
        return NULL;

    size_t size;
    if ((0 != fseek(fp, 0, SEEK_END)) || (-1 == (size = ftell(fp))))
        size = 0;

    // set fp at file start
    fseek(fp, 0, 0);

    char *buffer;
    buffer = (char*) malloc(size);
    if(!buffer)
    {
        fclose (fp);
        return NULL;
    }

    if(size != fread(buffer, 1, size, fp))
    {
        free (buffer);
        buffer = NULL;
    }

    fclose (fp);
    return buffer;
}

// replace string
std::string replace(const std::string& str, const std::string& from, const std::string& to)
{
    if(str.size() < 1)
        return str;

    std::string temp_str(str);

    size_t start_pos = 0;
    while((start_pos = temp_str.find(from, start_pos)) != std::string::npos)
    {
        temp_str.replace(start_pos, from.length(), to);
        start_pos += to.length();
    }

    return temp_str.c_str();
}


int main(int argc, char** argv)
{
    const char* file_name = "test.txt";

    char* file_bytes = load_file(file_name);

    if(file_bytes == nullptr)
        return EXIT_FAILURE;

    std::cout << replace(file_bytes, "”", "\"") << std::endl;
    return EXIT_SUCCESS;
}