Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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++ C++;std::string::assign工作异常_C++_String - Fatal编程技术网

C++ C++;std::string::assign工作异常

C++ C++;std::string::assign工作异常,c++,string,C++,String,需要经验丰富的工程师的帮助。我编写了一个函数,它获取一个字符串并从中获取一个子字符串。子字符串之间用逗号“,”分隔。我使用assign()函数复制子字符串。我的代码: void my_function(string devices) { unsigned int last=0; unsigned int address; printf("whole string: %s\n",devices.c_str()); for (unsigned int z=0; z&

需要经验丰富的工程师的帮助。我编写了一个函数,它获取一个字符串并从中获取一个子字符串。子字符串之间用逗号“,”分隔。我使用assign()函数复制子字符串。我的代码:

void my_function(string devices)
{
    unsigned int last=0;
    unsigned int address;
    printf("whole string: %s\n",devices.c_str());

    for (unsigned int z=0; z<devices.size();z++)
    {
        if(devices[z]==',')     
        {
            zone_name.assign(devices,last,z);
            printf("device:%s\n",zone_name.c_str());
            address=get_kd_address_by_name(zone_name);
            last=z+1;
            if(address>0)
            {   
                //doing stuff
            }
        }
    }
}

为什么assign()在“,”之后使用字符?

std::string::assign(您正在使用的重载)具有位置和长度。不是两个位置
z
devices
字符串中的一个位置。它只适用于第一个字符串,因为在这种情况下,起始位置为0,因此长度和结束位置相同

unsigned int length = z - last;
zone.assign(devices, last, length);

std::string::assign
(正在使用的重载)具有位置和长度。不是两个位置
z
devices
字符串中的一个位置。它只适用于第一个字符串,因为在这种情况下,起始位置为0,因此长度和结束位置相同

unsigned int length = z - last;
zone.assign(devices, last, length);

如果您只是试图根据某个分隔符拆分字符串,为什么不使用
boost::split

#include <boost/algorithm/string.hpp>
#include <vector>
#include <string>
#include <iostream>

int main(int, char*[])
{
    std::string input("foo,bar,baz");
    std::vector<std::string> output;

    std::cout << "Original: " << input << std::endl;      
    boost::split( output, input, boost::is_any_of(std::string(",")) );
    for( size_t i=0; i<output.size(); ++i )
    {
        std::cout << i << ": " << output[i] << std::endl;
    }

    return 0;
}

如果您只是试图根据某个分隔符拆分字符串,为什么不使用
boost::split

#include <boost/algorithm/string.hpp>
#include <vector>
#include <string>
#include <iostream>

int main(int, char*[])
{
    std::string input("foo,bar,baz");
    std::vector<std::string> output;

    std::cout << "Original: " << input << std::endl;      
    boost::split( output, input, boost::is_any_of(std::string(",")) );
    for( size_t i=0; i<output.size(); ++i )
    {
        std::cout << i << ": " << output[i] << std::endl;
    }

    return 0;
}

第一个提示:从逐字复制的代码中删除制表符(替换为空格)。未声明“zone_name”…请发布至少可编译的代码…我知道这不是您的问题,但是,如果您想知道在标记中拆分字符串的不同方法或希望看到不同的解决方案,请检查。第一个提示:删除制表符(替换为表示空格)从逐字复制的代码中。未声明“zone_name”…请发布至少可编译的代码…我知道这不是您的问题,但是,如果您想知道在标记中拆分字符串的不同方法或希望看到不同的解决方案,请查看。