1024
substr函数
-
形式:s.substr(pos, n) -
解释:返回一个string,包含s中从pos开始的n个字符的拷贝(pos的默认值是0,n的默认值是s.size() - pos,即不加参数会默认拷贝整个s) -
补充:若pos的值超过了string的大小,则substr函数会抛出一个out_of_range异常;若pos+n的值超过了string的大小,则substr会调整n的值,只拷贝到string的末尾
#include<string>
#include<iostream>
using namespace std;
int main()
{
string s("12345asdf");
string a = s.substr(0,5);
cout << a << endl;
}
stoi函数/atoi函数
atoi和stoi都是只转换字符串的数字部分,遇到其他字符则停止转换。
string s1("1234567");
string s11("+1.1234567");
char* s2 = "1234567";
int a = stoi(s1);
int b = atoi(s2);
int c = atoi(s1.c_str());
cout << a << endl;
cout << b << endl;
cout << c << endl;
题解
参考柳婼代码 有一点很奇怪:代码第21行int exp=stoi(s.substr(i+1)); 中如果是 stoi("-03") 为何输出为 exp=-3 ?
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
int i=0;
while(s[i]!='E') i++;
string num=s.substr(1,i-1);
int exp=stoi(s.substr(i+1));
if(s[0]=='-') cout<<"-";
if(exp<0){
cout<<"0.";
for(int j=0;j<abs(exp)-1;j++) cout<<'0';
for(int j=0;j<num.length();j++)
if(num[j]!='.') cout<<num[j];
}
else
{
cout<<num[0];
int cnt,j;
for(j=2,cnt=0;j<num.length()&&cnt<exp;j++,cnt++)
cout<<num[j];
if(j==num.length()){
for(int k=0;k<exp-cnt;k++) cout<<'0';
}
else{
cout<<'.';
for(int k=j;k<num.length();k++)
cout<<num[k];
}
}
return 0;
}
|