C++输入字符串小结

C++中常用的几种输入字符串的方式  cin、cin.get()、cin.getline()、getline()、gets()、getchar()

https://blog.csdn.net/u011486738/article/details/82082405

字符串分割提取小结

使用sscanf()提取数据时,最好不要用string类型接收:

    string input, name;
    input = "1234 +abc";

	sscanf(&input[0],"%[^ ]",&name[0]);

应该使用字符数组形式接收,如下:

    char str[100];
    string input;
    
    input = "1234 +abc";
    sscanf(&input[0],"%[^ ]",str);

原因:

int test_sscanf_0()
{
    char str[100];
    string input, name,name_cpy;

    input = "1234 +abc";
    cout<< "input = "<<input <<endl ;

	// sscanf(&input[0],"%[^ ]",&name[0]);//使用string类型接收
    sscanf(&input[0],"%s",&name[0]);
    //sscanf(&input[0],"%[^+]",str);//使用字符数组接收;读到空格截止;

	printf("%s\n",&name[0]);
    cout<< &name[0] <<endl ;
    cout<< "name = "<< &name[0] <<endl ;
    cout<< "name = "<< name <<endl ;//打印时没有数据

    name_cpy = name;
    cout<< "name_cpy = "<< &name_cpy[0] <<endl ;//打印时没有数据
    cout<< "name_cpy = "<< name_cpy <<endl ;//打印时没有数据
	return 0;


    //输出结果:
    /****
     * yuan@linx-c:~/ros_ws/catkin_test/devel/lib/first_roboware_pkg$ ./test_input 
        input = 1234 +abc
        1234
        1234
        name = 1234
        name = 
        name_cpy = 
        name_cpy = 
     * 
    */
}

用string类型接收,数据无法直接使用,需转换成char[]之后才能正常打印、赋值:

int test_scanf_1()
{
    string input;
    char name[20], input_char[100];
    float cmd_data[6] ={0};


    cout<<"Please input a cmd ---------------------------------"<<endl;
    // input = "head 23.0 45.3 67 89";
    cin.getline(&input[0], 100);//可包含空格,回车键结束
    cout<< "input = "<<input <<endl;//&input[0]接收,打印时无数据!
    
    printf("%s = \r\n", &input[0]);//可以正常打印
    strcpy(input_char,input.c_str());
    cout<< "input_char = "<<input_char<<endl; //可以正常打印   

    sscanf(&input[0], "%s", name);
    cout<< "cmd name = "<<name<<endl;

    sscanf(&input[0], "%s %f %f %f %f", name, &cmd_data[0], &cmd_data[1], &cmd_data[2], &cmd_data[3]);
    cout<< "cmd name = "<<name << "; data[] = "<< cmd_data[0]<< " " <<cmd_data[1]<< " "<< cmd_data[2]<< " "<< cmd_data[3] <<endl;
    
    return 0;

    /*****输出结果:
        yuan@linx-c:~/ros_ws/catkin_test/devel/lib/first_roboware_pkg$ ./test_input 
        Please input a cmd ---------------------------------
        asdsaf 2 3 4 5 6 
        input = 
        input_char = asdsaf 2 3 4 5 6 
        cmd name = asdsaf
        cmd name = asdsaf; data[] = 2 3 4 5
     * 
     */
}

猜你喜欢

转载自blog.csdn.net/reasonyuanrobot/article/details/110562813