C++中数字与字符串之间的转换 scanf string总结(复习必读)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中数字与字符串之间的转换 scanf string总结(复习必读)相关的知识,希望对你有一定的参考价值。
1 string的scanf读入操作
C++里面控制台输入直接使用cin操作就可以了;或者getline(istringstream,string);.
只有内置类型int,float,char,double,bool可以直接赋值,scanf读入string不能直接使用scanf直接赋值,因为string是一个类class,有专门的初始化函数,不能使用scanf,同理gets接收的也是一个char指针。编程语言自带的sizeof也是一样,不能对string进行直接操作。
string s; s.resize(100); scanf("%s",&s[0]);
或者:
string s; char *c = new char(100); scanf("%s",c);//scanf("%s",&c[0]); s = c;//给首地址
strlen是得到输入的有效字符串,而不是开辟的空间大小100.
strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符‘\0‘为止,然后返回计数器值。--就是指实际字符串或字符数组的实际长度(不是所占空间的字节数)。
char A[6]={‘a‘,‘b‘,‘\0‘,‘d‘,‘e‘,‘r‘};
int i=strlen(A); //i为2,因为到’\0’结束,故实际A[]只有2个元素
sizeof()
string s; char *c = new char(100); scanf("%s",c); int len = strlen(c); s1.resize(len);//动态编译 s1.assign(c,c + len);//copy(c,c + len,s1.begin());针对其他结构
class X
{
int i;
int j;
char k;
};
X x;
cout<<sizeof(X)<<endl; 结果 12 ===》内存补齐
cout<<sizeof(x)<<endl; 结果 12 同上
解释一下,在class X中,成员中最大的所占的空间为int类型所占的空间4个字节,故内存补齐,最后结果为: ((int)(实际成员所占内存空间的和/4)+1)*4
*所以不能通过sizeof(string) / sizeof(string[0])得到实际char元素个数,不管string等于多少,最后的结果都是28;因为string是一个class。
copy()用法:
此算法接收三个迭代器iterator,前两个表示一个输入范围,第三个表示目的序列的起始位置。
char 和int 的转换:
int = char - ‘0‘;
char = int + ‘0‘;
2 C++中数字与字符串之间的转换(important)
1、字符串数字之间的转换
(1)string --> char *
string str("OK");
const char * p = str.c_str();
(2)char * -->string
char *p = "OK";
string str(p);
(3)string->double
double d=atof(s.c_str());
常用函数atoi(),itoa(),to_string();
2、数字转字符串:使用sprintf()函数
char str[10];
int a=1234321;
sprintf(str,"%d",a);
--------------------
char str[10];
double a=123.321;
sprintf(str,"%.3lf",a);
--------------------
char str[10];
int a=175;
sprintf(str,"%x",a);//10进制转换成16进制,如果输出大写的字母是sprintf(str,"%X",a)
--------------------
char *itoa(int value, char* string, int radix);
同样也可以将数字转字符串,不过itoa()这个函数是平台相关的(不是标准里的),故在这里不推荐使用这个函数。
3、字符串转数字:使用sscanf()函数
char str[]="1234321";
int a;
sscanf(str,"%d",&a);
.............
char str[]="123.321";
double a;
sscanf(str,"%lf",&a);
.............
char str[]="AF";
int a;
sscanf(str,"%x",&a); //16进制转换成10进制
另外也可以使用atoi(),atol(),atof().
4、使用stringstream类
用ostringstream对象写一个字符串,类似于sprintf()
ostringstream s1;
int i = 22;
s1 << "Hello " << i << endl;
string s2 = s1.str();
cout << s2;
用istringstream对象读一个字符串,类似于sscanf()
istringstream stream1;
string string1 = "25";
stream1.str(string1);
int i;
stream1 >> i;
cout << i << endl; // displays 25
3 string类的所有函数操作总结
append() | |||
以上是关于C++中数字与字符串之间的转换 scanf string总结(复习必读)的主要内容,如果未能解决你的问题,请参考以下文章