通常當我用C寫東西++,我需要一個char
轉換成int
我只是做一個新int
等於字符。C++字符串雙轉換
我使用的代碼(段)
string word;
openfile >> word;
double lol=word;
我收到
Code1.cpp cannot convert `std::string' to `double' in initialization
是什麼錯誤恰恰意味着這個錯誤嗎?第一個字是數50謝謝:)
通常當我用C寫東西++,我需要一個char
轉換成int
我只是做一個新int
等於字符。C++字符串雙轉換
我使用的代碼(段)
string word;
openfile >> word;
double lol=word;
我收到
Code1.cpp cannot convert `std::string' to `double' in initialization
是什麼錯誤恰恰意味着這個錯誤嗎?第一個字是數50謝謝:)
您可以將char轉換爲int,反之亦然容易,因爲該機的INT和炭相同,8位,唯一的區別來當他們必須顯示在屏幕上,如果數字是65並保存爲字符,那麼它將顯示'A',如果它被保存爲int將顯示65.
隨着其他類型的東西改變,因爲它們在內存中的存儲方式不同。在C中有標準函數,可以讓你從字符串轉換爲double,很容易。 (您需要包括stdlib.h中)
#include <stdlib.h>
int main()
{
string word;
openfile >> word;
double lol = atof(word.c_str()); /*c_str is needed to convert string to const char*
previously (the function requires it)*/
return 0;
}
的問題是,C++是一種靜態類型語言,這意味着如果事情被聲明爲string
,這是一個字符串,如果事情被聲明爲double
,這是雙倍的。與JavaScript或PHP等其他語言不同,無法自動將字符串轉換爲數字值,因爲轉換可能沒有明確定義。例如,如果您嘗試將字符串"Hi there!"
轉換爲double
,則沒有有意義的轉換。當然,你可能只是將double
設置爲0.0或NaN,但這幾乎肯定會掩蓋代碼中存在問題的事實。
要解決此問題,請不要將文件內容緩衝到字符串中。相反,只需直接讀入double
:
double lol;
openfile >> lol;
這直接讀取值作爲實數,如果發生錯誤,將導致流的.fail()
方法返回true。例如:
double lol;
openfile >> lol;
if (openfile.fail()) {
cout << "Couldn't read a double from the file." << endl;
}
如果你正在閱讀文件,那麼你應該聽到給出的建議,並把它放到一個雙。
另一方面,如果你確實有一個字符串,你可以使用boost的lexical_cast。
這裏是一個(很簡單),例如:
int Foo(std::string anInt)
{
return lexical_cast<int>(anInt);
}
#include <string>
#include <cmath>
double _string_to_double(std::string s,unsigned short radix){
double n = 0;
for (unsigned short x = s.size(), y = 0;x>0;)
if(!(s[--x]^'.')) // if is equal
n/=pow(10,s.size()-1-x), y+= s.size()-x;
else
n+=((s[x]-48) * pow(10,s.size()-1-x - y));
return n;
}
或
//In case you want to convert from different bases.
#include <string>
#include <iostream>
#include <cmath>
double _string_to_double(std::string s,unsigned short radix){
double n = 0;
for (unsigned short x = s.size(), y = 0;x>0;)
if(!(s[--x]^'.'))
n/=pow(radix,s.size()-1-x), y+= s.size()-x;
else
n+=((s[x]- (s[x]<='9' ? '0':'0'+7) ) * pow(radix,s.size()-1-x - y));
return n;
}
int main(){
std::cout<<_string_to_double("10.A",16)<<std::endl;//Prints 16.625
std::cout<<_string_to_double("1001.1",2)<<std::endl;//Prints 9.5
std::cout<<_string_to_double("123.4",10)<<std::endl;//Prints 123.4
return 0;
}
丁文從字符串使用 '的strtod()' 從庫函數來增加一倍 可以實現「STDLIB 。H」
#include <iostream>
#include <stdlib.h>
int main()
{
std::string data="20.9";
double value = strtod(data.c_str(), NULL);
std::cout<<value<<'\n';
return 0;
}
#include <iostream>
#include <string>
using namespace std;
int main()
{
cout << stod(" 99.999 ") << endl;
}
輸出:99.999
(它是雙,空格被自動剝離)
由於C++ 11轉換字符串浮點值(例如雙)是可用的功能:
stof - STR轉換爲float
stod - STR轉換爲雙
stold - 轉換STR爲長雙
作爲字符串爲int問題中還提到的轉化率,有以下功能在C++ 11:
stoi - 轉換STR爲int
stol - 轉換STR爲長
stoul - 轉換STR爲無符號長
stoll - 轉換STR爲長長
stoull - 轉換STR爲無符號長長
的C++解決轉換(未經典C)的方式示出與下面的程序。請注意,目的是能夠使用iostream提供的相同格式設施,如精度,填充字符,填充,十六進制和操縱器等。
編譯並運行該程序,然後研究它。這是簡單
#include "iostream"
#include "iomanip"
#include "sstream"
using namespace std;
int main()
{
// Converting the content of a char array or a string to a double variable
double d;
string S;
S = "4.5";
istringstream(S) >> d;
cout << "\nThe value of the double variable d is " << d << endl;
istringstream("9.87654") >> d;
cout << "\nNow the value of the double variable d is " << d << endl;
// Converting a double to string with formatting restrictions
double D=3.771234567;
ostringstream Q;
Q.fill('#');
Q << "<<<" << setprecision(6) << setw(20) << D << ">>>";
S = Q.str(); // formatted converted double is now in string
cout << "\nThe value of the string variable S is " << S << endl;
return 0;
}
Martinez的教授
[字符串科學記數法C++來雙轉換(的
可能重複http://stackoverflow.com/questions/1710447/string-in-scientific-notation- c-to-double-conversion) – 2011-01-20 23:53:28
這基本上是重複的,唯一不同的是你甚至不需要經過字符串階段,因爲你可以直接讀入double。 – 2011-01-20 23:54:26
將char轉換爲int時,您將得到該字符的代碼,而不是它的感知「值」。換句話說,'int x ='0';`將`x`設置爲`48`(如果您處於ASCII兼容區域),而不是`0`。 – 2011-01-20 23:56:28