これは、このWrite コードから c++ で書かれたプログラムで、指定された数値を単語に変換します (たとえば、入力として 1234 を入力すると、1234 が出力されます)数値を単語に変換するように修正しました。
私のプログラムでは、cout を使用して繰り返す代わりに、ostream オブジェクト out を作成し、戻り値を out に配置しました。
プログラムはこちら
#include<iostream>
using namespace std;
ostream & expand(int);
int main()
{
int num;
cin>>num;
cout<<expand(num);
}
ostream & expand(int value)
{
ostream &out;
out<<"";
const char * const ones[21] = {"zero", "one", "two", "three","four","five","six","seven",
"eight","nine","ten", "eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen",
"eighteen","nineteen"};
const char * const tens[10] = {"", "ten", "twenty", "thirty","forty","fifty","sixty","seventy",
"eighty","ninety"};
if(value<0)
{
out<<"minus "<<expand(-value);
}
else if(value>=1000000){
out<<expand(value/1000000)<<" million";
if(value % 1000000)
{
out<<" "<<expand(value % 1000000);
}
}
else if(value>=1000)
{
out<<expand(value/1000)<<" thousand";
if(value % 1000)
{
if(value % 1000 < 100)
{
out << " and";
}
out << " " <<expand(value % 1000);
}
}
else if(value >= 100)
{
out<<expand(value / 100)<<" hundred";
if(value % 100)
{
out << " and "<<expand (value % 100);
}
}
else if(value >= 20)
{
out << tens[value / 10];
if(value % 10)
{
out << " " << expand(value % 10);
}
}
else
{
out << ones[value];
}
return &out;
}
ただし、コンパイル中に次のエラーが発生します。
In function 'std::ostream& expand(int)':
Line 13: error: 'out' declared as reference but not initialized
compilation terminated due to -Wfatal-errors.
私を助けてください。
ostream &out=cout;
最後に と を設定してみましたreturn out
。しかし、次の結果が得られcout<<expand(111234)
ます。
one0x8050884 hundredeleven and 0x80508840x8050884 thousandtwo0x8050884 hundredthirtyfour 0x8050884 and 0x8050884 0x80508840x8050884