No.7ベストアンサー
- 回答日時:
No.3 です。
>atoi という文法を初めて知りました。
>とても便利ですね。
>まだ習っていない文法ですので、使ったらあかん言われました。
失礼しました、「桁の計算」等の思考を含む「ポインタ」の勉強だったですね。
つい便利なものだから・・。
>'-0' で数値化をしてそれを繰り返すのかと思っていますが、桁の計算をどうすればいいのかわかりせん。
・-'0' ですね(★)。
・「繰り返す」のは、while()文で。
・「桁の計算」は、10倍して加えるだけ。
例)文字列 "321" の場合。
1)はじめに、'3' - '0' で 3
2)次に、3 * 10 = 30、'2' - '0' で 2、30 + 2 = 32
3)次に、32 * 10 = 320、'1' - '0' で 1、320 + 1 = 321
ここで重要なのは、次の文字が「数」と判った時点で10倍することです。
参考:http://e-words.jp/p/r-ascii.html
注 :使用文字は、数文字とカンマの11ケ限定。
#include <stdio.h>
void main()
{
char data[ 32 ] = "54321,4321,321,21,1"; // 末尾に '\0' をコンパイラが追加
char *p = data;
int iVal = 0; // 初期化
while( *p ){
iVal *= 10; // 桁上げ
iVal += ( *p - '0' ); // 数字 → 数値★、加算
p++; // 次の文字へ
if( '\0' == *p ){ // 終了
printf( "%d\n", iVal );
break;
}
if( ',' == *p ){
printf( "%d\n", iVal );
iVal = 0; // 初期化
p++; // 次の文字へ
}
}
}
注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。
丁寧な解説ありがとうございました。
頭の中がごっちゃになっていたので、すごくすっきりしました。
理解できそうです。
これからソースを読んでいこうと思います。
ありがとうございました!!
No.6
- 回答日時:
>atoi()という便利な文法初めて知りました!
文法ではなく、関数です。
>int型の数字 "5432,434"を導き出したいです。
「数字」と「数値」の違いは理解されていますか?
>'-0' で数値化をしてそれを繰り返すのかと思っていますが、桁の計算をどうすればいいのかわかりせん。
1)数値を入れる変数を0で初期化しておきます。
2)1文字目の文字コードから'0'を引いて数値化して数値を入れる変数に足します。
3)次の文字も数字だったら数値を入れる変数の内容を10倍して再格納します。
4)3)で判定した文字から'0'を引いて数値化して数値を入れる変数に足します。
5)3)から4)を数字が続く限り続けます。
と、そんな感じで。
No.4
- 回答日時:
>char data[]="5436,434";
この例題からどういう数値を拾い出したいかを明記してください。
そうしないと、すべての回答は空論に過ぎなくなってしまいます。
この回答への補足
説明不足ですみません。
char data[]="5436,434";
文字列の配列から、
int型の数字 "5432,434"を導き出したいです。
No.3
- 回答日時:
>ポインタを使って 数値に変換したいのですが、わかりません。
課題ならば、int main() + return( 0 ); に変えてください。
#include <stdio.h>
#include <stdlib.h>
void main()
{
char data[ 32 ] = "54321,4321,321,21,1";
char *p = data;
int iVal;
while( *p ){
iVal = atoi( p ); // , の手前まで
printf( "%d\n", iVal );
while( *p && ( ',' != *p ) ) p++;
if( '\0' == *p ) break; // 終了
p++; // , の次(数字の先頭)
}
}
注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。
ソースありがとうございました。
atoi という文法を初めて知りました。
とても便利ですね。
まだ習っていない文法ですので、使ったらあかん言われました。
'-0' で数値化をしてそれを繰り返すのかと思っていますが、桁の計算をどうすればいいのかわかりせん。
No.2
- 回答日時:
カンマの数が決まっているなら、sscanfが一番便利です。
int a,b;
sscanf("5436,434","%d ,%d",&a,&b);
ポインタも一応使ってるし。それとも課題?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Visual Basic(VBA) A列にある値をB列・C列にVBAで切り出し 3 2022/04/09 19:20
- C言語・C++・C# C言語 配列とポインタについて 2 2022/06/02 11:53
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- Excel(エクセル) Excelの文字列を数字に変換する方法について 6 2023/07/31 21:18
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のintとcharの違いってな...
-
char*を初期化したいのですが
-
strcat関数を自作したいです
-
CStringからchar*への型変換に...
-
szとlpszの違い
-
警告
-
文字列のswap
-
C言語でポインターで詰まってい...
-
fgetc( )の戻り値はなぜ整数??
-
文字列の途中から途中までを抽出
-
csvファイルを構造体に格納した...
-
char[]をDWORDに格納するには
-
共用体について
-
wsprintf( ポインタ , "%d" , "...
-
文字列内の数字削除
-
動的メモリの初期化方法について。
-
'\\0'とはなんですか?
-
簡易版smtpクライアント(メール...
-
SubStringの使い方について
-
文字列の演算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
char*を初期化したいのですが
-
C言語のintとcharの違いってな...
-
CStringからchar*への型変換に...
-
C言語にて構造体のメンバがNULL...
-
小数点入りの文字列をfloat型に...
-
C言語のプログラムについてです
-
strcat関数を自作したいです
-
fstream型オブジェクトを関数の...
-
new charとnew char[N]の違いは?
-
DWORDとcharの変換
-
文字列の途中から途中までを抽出
-
char 文字列型 の表現範囲が-12...
-
const char* s1とただのchar s1...
-
wsprintf( ポインタ , "%d" , "...
-
c言語でポインタ変数を用いた配...
-
char型にint型の数値を代入する。
-
C言語で文字列をかえす正しい書...
-
C++17で、unsigned char * 配列...
-
共用体について
-
エクセルのMID関数は、C言語では?
おすすめ情報