char型ASCIIデータをdouble型10進数データに変換 – プログラミング – Home

char型ASCIIデータをdoubl...
 
通知
すべてクリア

[解決済] char型ASCIIデータをdouble型10進数データに変換


lampdam
 lampdam
(@lampdam)
ゲスト
結合: 17年前
投稿: 1
Topic starter  

初投稿です。

CまたはC++で
以下の様なchar型ASCIIデータ

「+1254-0087+1224-0100」

をdouble型

「a=1254,b=-87,c=1224,d=-100」

の様な10進数データに変換するにはどのようなアルゴリズムのプログラミング
をすればよいのでしょうか。

ご指導よろしくお願いします。


引用未解決
トピックタグ
lampdam
 lampdam
(@lampdam)
ゲスト
結合: 17年前
投稿: 9
 

失礼しました。

開発環境は
WinXP、Borland C++ Compiler 5.5 または VC++.net 2003
です。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

strtodとか。


返信引用
lampdam
 lampdam
(@lampdam)
ゲスト
結合: 17年前
投稿: 9
 

C言語初心者ですので、初歩的な質問でしたら申し訳ありません。

strtod()関数をもちいて、上記のASCIIコードの「1254」「0087」をとりだして、
「+」「-」も判定し、double型にするには具体的にはどのようなプログラムにすれば
よいのでしょうか?


返信引用
しま
 しま
(@しま)
ゲスト
結合: 18年前
投稿: 123
 

数字以外が見つかったところが数(かず、すう)として扱うまとまりの終わり
ということで区切りたいということですか?

それなら、
あ)文字列の中に数字の列が符号の次に続いているので先ず符号を取り出す
い)符号のすぐ後ろの文字列の先頭から順に見ていって数の終わりを探す
う)符号と符号に続く数字の列の最後までが取り扱いたい塊(かたまり)
え)これ(あ~う)を文字列の最後まで続ける

という方針でよいように思います


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

まあとりあえず strtod のマニュアルを見て一度使ってみれってことだ
初心者だからこそ自分で一度は試さんと上達しないぞ
上達したくないなら教えてクンでもかまわんけどな


返信引用
lampdam
 lampdam
(@lampdam)
ゲスト
結合: 17年前
投稿: 9
 

>しまさん
>tetrapodさん
昨日はよく自分で確かめてもみずに質問ばかりしてしまい、失礼しました。
strtod関数は「+」「-」の判定もできることがわかり、昨日皆様にお聞きした内容が検
討違いなものであるか分かりました。
しまさん、こんな質問にも丁寧に答えていただきありがとうございます。

strtod関数を使ってみて質問があるのですが、もしよければ教えていただけないでしょ
うか?

----------------------------------------------------------------
#include <stdlib.h>
#include <stdio.h>

int main()
{
int i,j;
char a[21] = +1254-0087+1224-0100,X1[5],Y1[5],*e;
double x1,y1;

for (i = 0; i < 5; i++)
X1[i]=a[i];
x1 = strtod(X1, &e);

for (j = 5; j < 10; j++)
Y1[j]=a[j];
y1 = strtod(Y1, &e);

printf(x1=%g y1=%g\n, x1,y1);
return 0;
}
----------------------------------------------------------------

上記のようなプログラムを書いたのですが、y1の出力が0になってしまいます。
iの範囲を5~9にしても、x1が0になってしまうのですが、理由がわからず詰まってい
ます。

昨日失礼な質問をしたばかりで恐縮ですが、よろしくお願いします。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

strtodの第二引数が何かを理解しましょう。

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
char text[21] = +1254-0087+1224-0100;
char* p;
double a, b, c, d;

a = strtod(text, &p);
b = strtod(p, &p);
c = strtod(p, &p);
d = strtod(p, NULL);

printf(a=%g,b=%g,c=%g,d=%g\n, a, b, c, d);

return 0;
}


返信引用
lampdam
 lampdam
(@lampdam)
ゲスト
結合: 17年前
投稿: 9
 

>Blueさん
昨日に引き続き、早速のお返事ありがとうございます。

自分がポインタについてよく理解していなかったことが、分かりましたが
おかげさまで解決できました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました