Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从cmd返回的字符串不为';t按预期拆分(C+;+;)_C++ - Fatal编程技术网

C++ 从cmd返回的字符串不为';t按预期拆分(C+;+;)

C++ 从cmd返回的字符串不为';t按预期拆分(C+;+;),c++,C++,我正在调用一个独立的程序,从我的程序中,处理一个单位转换。我得到的返回字符串很好,但它没有像我预期的那样分裂。我正在尝试拆分此(轻微编辑)输出: 变成一个向量。相反,它被拆分为“50.05551390197077665789 50.60658280925650487347”、“0.00000000000000” 我正在使用此函数运行另一个程序: std::string Util::execute_cmd(const char* cmd) { std::array<char, 12

我正在调用一个独立的程序,从我的程序中,处理一个单位转换。我得到的返回字符串很好,但它没有像我预期的那样分裂。我正在尝试拆分此(轻微编辑)输出:

变成一个向量。相反,它被拆分为“50.05551390197077665789 50.60658280925650487347”、“0.00000000000000”

我正在使用此函数运行另一个程序:

std::string Util::execute_cmd(const char* cmd) 
{
    std::array<char, 128> cmd_buffer;

    std::string result;

    std::unique_ptr<FILE, decltype(&_pclose)> pipe(_popen(cmd, "r"), _pclose);

    if (!pipe) 
    {
        throw std::runtime_error("popen() failed!");
    }
    while (fgets(cmd_buffer.data(), cmd_buffer.size(), pipe.get()) != nullptr) 
    {
        result += cmd_buffer.data();
    }

    return result;
}
其中返回以下内容:

50.05551479305879780668 50.60658606200054876467,0.00000000000000000000,

我不知道那个角色是什么。如果我复制它,它就会变成一个空间。我能把它转换成空格吗?

这个字符是一个制表符。多亏了这篇文章中给出的建议,我打印了字符串中每个字符的ASCII值,并且可以从那里开始工作

std::vector<std::string> latlong = Util::separate_data(result, '\t')
std::vector latlong=Util::分离_数据(结果“\t”)

使用它,我可以将字符串拆分到我期望的位置。

空格的十六进制值是多少?(或十进制,应该同样简单)我如何检查?我不能轻易地将它隔离在程序中。如果我复制它,它只是一个空格。打印出字符串中每个字符的十进制值(例如,
std::cout是你学习编程来转换坐标的目标吗?如果你关注的是后者,我建议直接使用proj或gdal,除非有其他未知的约束。为什么?它使你的生活更容易、更快,并给你更多的控制。有什么东西阻止你在每个字符上迭代吗字符串中的acter,打印它的ASCII值,以便您可以看到每个字符实际上是什么?
std::vector<std::string> Util::separate_data(std::string input, char delimiter)
{
    std::vector<std::string> data;
    std::stringstream ss(input);

    while (ss.good())
    {
        std::string entry;
        getline(ss, entry, delimiter);
        data.push_back(entry);
    }

    return data;
}
std::replace(result.begin(), result.end(), ' ', ',');
50.05551479305879780668 50.60658606200054876467,0.00000000000000000000,
std::vector<std::string> latlong = Util::separate_data(result, '\t')