こんにちわ。
char型の文字列"1.00"〜"-1.00"について、
まず小数点を取り除き、数値"100"〜"-100"としてint型に格納する。
そして、マイナスの符号がついているなら、
ビットを反転させ、1を加える
という処理を行おうと思っているのですが、C言語でどのように
記述すればいいのでしょうか?
以上、宜しくお願いします。
>まず小数点を取り除き
strchr関数とstrcpy関数あたりを使って削除してください。
(C++ならば簡単なんだが)
>そして、マイナスの符号がついているなら、
>ビットを反転させ、1を加える
int n = -100;
printf( "%x\n", n );
はどんな文字列が表示されますか?望んでいたものではないでしょうか?
(つまり、C言語ではちゃんと符号ビットを持っているということ)
strなんちゃらで削除するくらいなら俺ならこっち
if (sscanf(str, "%d.%d", &x, &y)==2) z=x*100+y;
>strなんちゃらで削除するくらいなら俺ならこっち
書式が決まっているなら、sscanfで十分ですね。
>strchr関数とstrcpy関数あたりを使って削除してください。
strcpyを使うよりも、memmove関数の方がよかったかも。
char s[] = "-1.01";
char* pos = strchr( s, '.' );
if ( pos != NULL )
{
memmove( pos, pos + 1, strlen( pos ) );
}
int n = strtol( s, NULL, 10 );
double d;
if (sscanf(str,"%g",&d)==1) z=(int)(d*100);
という人がいたらツッコもうと思っていたのですがさすがにいませんか。
z = (int)(strtod(str, NULL) * 100);
なんてことを考えた私はツッコミの対象ですか?
"-1.00" - "1.00"の201個中、
VC++ 6, 2005 : 6個
bcc32、gcc、dmc: 88個
の変換ミスがあったので、
z = floor(strtod(str, NULL) * 100 + .5);
で誤魔化して満足してしまっては処置なしですか?(^^;
皆さまからのアドバイスで問題が解決出来ました。
ありがとうございました。
ツイート | ![]() |