char型の配列の中から数を取り出して足し算させたいです。
この配列には数字だけではなく英数字のどちらかが入るので、intではなくchar型の配列を作りました。
scanf("%c", &i);
と、scan文をループさせてchar i[3]の中身を{1,1,a}と入れたとします。
このとき、i[0]+i[1]とやると、中の文字コード(?)を足してしまって98という結果が出てきてしまいます。
かといって、
scan("%d", &i);とやると、数字を入れているときはいいのですが英字を入れると「フ」という文字になってしまいます。
上手い具合に数字はコードじゃなく数字として、英字は英字のまま1つの配列の中に入れられないものでしょうか。
宜しくお願いします。
No.2ベストアンサー
- 回答日時:
こんなことがしたいのでしょうか。
#1さんの回答にあったctoi関数(標準関数にはありません、念のため)を作ってみました。
#include <stdio.h>
#include <ctype.h>
int ctoi(char c)
{
return isdigit(c) ? c - '0' : c;
}
int main(void)
{
char a[3] = { '1', '1', 'a' };
printf("%d\n", a[0] + a[1]);
printf("%d\n", ctoi(a[0]) + ctoi(a[1]));
return 0;
}
ところで、
> scan文
scanf関数です。文と関数とを正確に区別しましょう。
No.4
- 回答日時:
>#3さん
> void main()
main関数の型は、C言語の規格でintと決まっています。
> char cStr[32] = "0a1b2c3d4e5f6789\0";
最後の\0は、なくてもよいですね。あってもいいですけれど。
> if( ( *p9 > '0' ) && ( *p9 <= '9' ) ) *p9 &= 0x0F; // ◆
0x0FとのANDをとるよりは、'0'を引く方が直感的にわかりやすそうな気がします。
No.3
- 回答日時:
☆ご質問主旨2つの関わりが、いまいち、・・。
>char型の配列の中から数を取り出して足し算させたいです。
・配列の個々の値が1~9であるもののみ、加算するだけでは・・。
・0で文字列終了(▼)。
>数字はコードじゃなく数字として、英字は英字のまま1つの配列の中に入れられないものでしょうか。
・直接入れるのでなく、文字として入れてから、数に変換する方法も(下にソース)。
ソースでは、
・コードが49~57の場合のみ、数に変換(◆)しています。
なお、'0' はそのままのコード(48)で入れてます(▼文字列終了判定のため)。
http://e-words.jp/p/r-ascii.html
--------------------------------------------
#include <stdio.h>
void main()
{
char cStr[32] = "0a1b2c3d4e5f6789\0";
char *p9, *p0;
p0 = p9 = cStr;
while( *p9 ){ // 数字コード → 数
printf( "%02X ", *p9 ); // 変更前
if( ( *p9 > '0' ) && ( *p9 <= '9' ) ) *p9 &= 0x0F; // ◆
p9++;
}
printf( "\n" );
while( *p0 ){
printf( "%02X ", *p0 ); // 変更後
p0++;
}
printf( "\n" );
}
注:インデントに全角空白を用いています。タブに一括変換して下さい。
すみません、分かりにくい質問ですよね。
僕も質問しながら「伝わりにくそうな質問文だなぁ・・・。」とは思ったのですが、みなさんに主旨を汲み取っていただけたようでほっとしております。
文字として入力して、後から変換をかける方法もあるんですね。
参考になります。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
ことしの初夢、何だった?
2025年になりましたね。1年の吉凶を占う風習といわれている初夢。ことし初めて見た夢、覚えていますか?
-
自分独自の健康法はある?
こうしていると調子がいい!みたいな自分独自の健康法、こだわりはありますか?
-
AIツールの活用方法を教えて
みなさんは普段どのような場面でAIツール(ChatGPTなど)を活用していますか?
-
今から楽しみな予定はありますか?
いよいよ2025年が始まりました。皆さんには、今から楽しみにしている予定はありますか?
-
charでの計算?
C言語・C++・C#
-
C言語のchar型配列を計算させる方法
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・ことしの初夢、何だった?
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列を使わずに、変数名を動的...
-
C言語 配列の長さの上限
-
C言語で特定列だけを抽出して配...
-
配列を含む構造体の初期値について
-
C# 配列の変数宣言について。
-
【速いブラインドタッチ】手を...
-
配列内の文字間を排他的論理和...
-
char型の二次元配列の意味が分...
-
C# Listを使わずに2次元配列の...
-
銀行ATMの数字キーの配列
-
プログラムが書けません。
-
VBAで配列からbmp画像を出力す...
-
配列で格納したものをmsgboxで...
-
Functionの戻り値を2次元配列...
-
VBで構造体の配列を関数に渡す...
-
複数の選択範囲の行番号を個別...
-
CSVファイルのデータを2次元配...
-
配列をEraseしてもメモリが開放...
-
テキストファイルから文字列を...
-
【VBS】 フォルダ直下のファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
C# Listを使わずに2次元配列の...
-
配列で格納したものをmsgboxで...
-
先頭アドレスとは何ですか?
-
C言語で特定列だけを抽出して配...
-
複数の選択範囲の行番号を個別...
-
配列の参照渡しで型が一致しま...
-
テキストファイルから文字列を...
-
【速いブラインドタッチ】手を...
-
C# 配列の変数宣言について。
-
unsigned char配列への入力の仕方
-
【C言語】配列の中に配列を入れ...
-
VBで構造体の配列を関数に渡す...
-
配列を含む構造体の初期値について
-
C++ vectorに配列をプッシュしたい
-
ExcelVBAで質問です。離れた二...
-
配列をEraseしてもメモリが開放...
-
Functionの戻り値を2次元配列...
-
VB.NET 構造体の配列の検索機能...
おすすめ情報