最近刷题总遇到输入字符串用不了的问题,后来发现了一些端倪,于是编写了下面函数验证:
研究用c和c++模式输入string
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str_scanf,str_cin;
printf("str_scanf:");
scanf("%s",str_scanf.c_str());//c方法输入
printf("str_cin:");
cin>>str_cin;//c++方法输入
printf("\n");
//c方法字符串属性
printf("%s len:%d\n",str_scanf.c_str(),str_scanf.length());
cout<<str_scanf<<" len:"<<str_scanf.length()<<endl;
if(str_scanf=="abc")
cout<<"str_scanf=abd"<<endl<<endl;
else
cout<<"str_scanf!=abd"<<endl<<endl;
//c++方法字符串属性
printf("%s len:%d\n",str_cin.c_str(),str_cin.length());
cout<<str_cin<<" len:"<<str_cin.length()<<endl;
if(str_cin=="abc")
cout<<"str_cin=abd"<<endl<<endl;
else
cout<<"str_cin!=abd"<<endl<<endl;
return 0;
}
运行结果
个人推测使用在scanf输入字符串使用string.c_str()方法,是直接改变了字符串对象指向的char类型的一段地址,这时跳过了string规定的输入方式,无法改变string对象的长度等成员变量属性(这也是为什么字符串长度为0,判“==”失效,且用cout无法输出)。而string对cin输入进行了兼容,所以在输入值的同时,string对象的属性也随之改变了。