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
*
*/
}