有两种将字符串转换为数字的常用方法:
使用stringstream类或sscanf()
stringstream():这是将数字字符串转换为int,float或double的简单方法。以下是使用stringstream将字符串转换为int的示例程序。
CPP
// A program to demonstrate the use of stringstream
#include
#include
using namespace std;
int main()
{
string s = "12345";
// object from the class stringstream
stringstream geek(s);
// The object has the value 12345 and stream
// it to the integer x
int x = 0;
geek >> x;
// Now the variable x holds the value 12345
cout << "Value of x : " << x;
return 0;
}
CPP
#include
int main()
{
const char *str = "12345";
int x;
sscanf(str, "%d", &x);
printf("\nThe value of x : %d", x);
return 0;
}
CPP
// C++ program to demonstrate working of stoi()
// Work only if compiler supports C++11 or above.
#include
#include
using namespace std;
int main()
{
string str1 = "45";
string str2 = "3.14159";
string str3 = "31337 geek";
int myint1 = stoi(str1);
int myint2 = stoi(str2);
int myint3 = stoi(str3);
cout << "stoi(\"" << str1 << "\") is "
<< myint1 << '\n';
cout << "stoi(\"" << str2 << "\") is "
<< myint2 << '\n';
cout << "stoi(\"" << str3 << "\") is "
<< myint3 << '\n';
return 0;
}
CPP
// For C++11 above
#include
#include
using namespace std;
int main()
{
const char* str1 = "42";
const char* str2 = "3.14159";
const char* str3 = "31337 geek";
int num1 = atoi(str1);
int num2 = atoi(str2);
int num3 = atoi(str3);
cout << "atoi(\"" << str1 << "\") is " << num1 << '\n';
cout << "atoi(\"" << str2 << "\") is " << num2 << '\n';
cout << "atoi(\"" << str3 << "\") is " << num3 << '\n';
return 0;
}
C
#include
#include
int main()
{
char* str1 = "42";
char* str2 = "3.14159";
char* str3 = "31337 geek";
int myint1 = atoi(str1);
int myint2 = atoi(str2);
int myint3 = atoi(str3);
printf("stoi(%s) is %d \n", str1, myint1);
printf("stoi(%s) is %d \n", str2, myint2);
printf("stoi(%s) is %d \n", str3, myint3);
// This Code is Contributed by Harshit Srivastava
return 0;
}
输出:
Value of x : 12345
// A stringstream is similar to input/output
// file stream. We need to declare a stringstream
// just like an fstream, for example:
stringstream ss;
// and, like an fstream or cout,
// we can write to it:
ss << myString; or
ss << myCstring; or
ss << myInt;, or float, or double, etc.
// and we can read from it:
ss >> myChar; or
ss >> myCstring; or
ss >> myInt;
总而言之,stringstream是一种方便的操作字符串。
sscanf()是类似于scanf()的C样式函数。它从字符串而不是标准输入中读取输入。
CPP
#include
int main()
{
const char *str = "12345";
int x;
sscanf(str, "%d", &x);
printf("\nThe value of x : %d", x);
return 0;
}
输出:
Value of x : 12345
同样,我们可以分别使用%f和%lf读取float和double。
使用stoi()或atoi()进行字符串转换
stoi(): stoi()函数将字符串作为参数并返回其值。以下是一个简单的实现:
CPP
// C++ program to demonstrate working of stoi()
// Work only if compiler supports C++11 or above.
#include
#include
using namespace std;
int main()
{
string str1 = "45";
string str2 = "3.14159";
string str3 = "31337 geek";
int myint1 = stoi(str1);
int myint2 = stoi(str2);
int myint3 = stoi(str3);
cout << "stoi(\"" << str1 << "\") is "
<< myint1 << '\n';
cout << "stoi(\"" << str2 << "\") is "
<< myint2 << '\n';
cout << "stoi(\"" << str3 << "\") is "
<< myint3 << '\n';
return 0;
}
输出:
stoi("45") is 45
stoi("3.14159") is 3
stoi("31337 geek") is 31337
atoi(): atoi()函数将字符数组或字符串字面量作为参数并返回其值。以下是一个简单的实现:
CPP
// For C++11 above
#include
#include
using namespace std;
int main()
{
const char* str1 = "42";
const char* str2 = "3.14159";
const char* str3 = "31337 geek";
int num1 = atoi(str1);
int num2 = atoi(str2);
int num3 = atoi(str3);
cout << "atoi(\"" << str1 << "\") is " << num1 << '\n';
cout << "atoi(\"" << str2 << "\") is " << num2 << '\n';
cout << "atoi(\"" << str3 << "\") is " << num3 << '\n';
return 0;
}
C
#include
#include
int main()
{
char* str1 = "42";
char* str2 = "3.14159";
char* str3 = "31337 geek";
int myint1 = atoi(str1);
int myint2 = atoi(str2);
int myint3 = atoi(str3);
printf("stoi(%s) is %d \n", str1, myint1);
printf("stoi(%s) is %d \n", str2, myint2);
printf("stoi(%s) is %d \n", str3, myint3);
// This Code is Contributed by Harshit Srivastava
return 0;
}
输出:
atoi("42") is 42
atoi("3.14159") is 3
atoi("31337 geek") is 31337
stoi()vs atoi()
- atoi()是旧的C样式函数。在C++ 11中添加了stoi()。
- atoi()仅适用于C样式的字符串(字符数组和字符串字面量),stoi()适用于C++的字符串和C样式的字符串
- atoi()仅接受一个参数,并返回整数值。
int atoi (const char * str);
- stoi()最多可以包含三个参数,第二个参数用于起始索引,第三个参数用于输入数字的基数。
int stoi (const string& str, size_t* index = 0, int base = 10);
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。