求问c++中string类怎么用scanf读取

cin我知道
我是问能不能用scanf,能用的话要怎么用

String类可以用cin流式读取。

在用scanf读取时,必须声明长度。不声明长度,直接scanf会出现运行时错误。

#include <stdio.h>

#include <string>

using namespace std;

int main()

{

string a;

a.resize(100); //需要预先分配空间

scanf("%s", &a[0]);

puts(a.c_str());

return 0;

}

扩展资料:

C++11标准规定:basic_string的元素是连续存储的。即对于basic_string s,有:&*(s.begin() + n) == &*s.begin() + n,其中n属于[0, s.size())。

换句话说,指向s[0]的指针即为指向CharT[]数组的首元素指针。C++11已经禁止了写入时复制(copy-on-write)的实现,因为存在多线程安全问题。一般都采用了小字符串优化(SSO)实现,如Visual C++:

union _Bxty { // storage for small buffer or pointer to larger one _Elem _Buf[_BUF_SIZE]; _Elem *_Ptr; } _Bx; size_type _Mysize; // current length of stringsize_type _Myres; // current storage reserved for string

GCC从版本5开始,std::string不再采用COW策略。

C++17标准规定,basic_string是AllocatorAwareContainer, SequenceContainer与ContiguousContainer。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-04-13
从控制台读入到字符串中
#include <stdio.h>
#include <string>
using namespace std;

int main()
{
string a;
a.resize(100); //需要预先分配空间
scanf("%s", &a[0]);
puts(a.c_str());
return 0;
}

如果是要从字符串中读出数据
string a;
int n;
sscanf(a.c_str(), "%d", &n);本回答被提问者采纳
第2个回答  2012-01-20
你问的这个和字符串有关哦。答案是不能用scanf读取string。
scanf是C语言<stdio.h>里的标准库函数,凡是它能读取的,都能用格式控制符表示。如读取int型变量就是%d,字符型变量就是%c。
C语言里的字符串是用char*,也就是字符指针处理的,必须借助库函数gets。
而C++里的string又是什么东西呢?它是STL里的一个类,叫string类,和其它的容器类非常相似,如vector,list等等。要使用string类必须#include <string.h>,这个你肯定知道吧?
你想,C语言不支持面向对象,连类都没有,又怎么能读取string类的对象呢?
第3个回答  2012-01-20
还是先读进字符数组 再将字符数组赋给string 这样比较常见 直接输入的话 还真没试过
第4个回答  2012-01-20
C++中用cin输入。
string a;
cin>>a;