引き算がしたいのですが。。。

[戻る]
困った 2002/01/15(火) 17:55:51
どうも、初めまして。
困ったです。

引き算がしたいのですが、
うまくいきません。

char a;

〜処理〜

a = a -'1';

キャラクターから、整数で引き算することは出来ない事はわかりました。
でも、とてもしたいのです。

なので、aを引き算をする時だけ一時的に整数に置き換える。
なんて出来ないでしょうか?
もっと良いやり方とかありましたら、教えてください。

かなり、初歩的な質問で申し訳ありません。
宜しくお願いします。

コキン 2002/01/15(火) 18:16:15
char型は1バイトの大きさを持っています。intは4バイトです。(処理系?によって異なったりするみたいですが)
違いは(多分)それだけです。
要するにchar型は文字専用の変数ではないということです。アスキーコード表を見てみると判ると思いますが、
すべの文字は整数で表現されてます。ですから、

char ch = '1';

printf("%d\n",ch);

ということも当然出来ます。ただ、1-'1'=0にはなりません。理由は、アスキーコード表を見てください。

>aを引き算をする時だけ一時的に整数に置き換える。
つまりこの解釈の仕方が間違ってます。

と、こんなんで大丈夫でしょうか?

CdS 2002/01/15(火) 18:20:10
結局何がしたいんでしょう?
    a = a - 1;
ということ?もっと簡単に書けば
    a--;
ですけど。

けん★ 2002/01/16(水) 09:16:24
char a;

〜処理〜


int i;

i = atoi(a) - 1;

itoa(i,a,10);


こんな感じでいかがでしょうか?

TAKA 2002/01/16(水) 09:27:08
aが何を表したいのでしょうか?
aが一桁の数値なのでしょうか?
それともaが文字の数値なのでしょうか?
それとも単純に文字なのでしょうか?
それがわからないと、正確に答えられません。

困った 2002/01/16(水) 11:23:50
[[解決]]
困ったです。

情報が足りなくてすみません。
一応解決はしたのですが、
もっと、いいやり方があったら教えてください。

**ソース開始**
CString a; //"2"が設定されています。

// aから-1を行いたい
char CharA;
CharstrSPage = atoi(a);        // 演算の為CStringをCharに変換
CharA= CharA- 1;    
szCPage.Format("%d", CharA);
**ソース終了**

atoi関数でCStringからCharに変換
引き算を行う
Format関数を使用しCStringに戻す。

こんな感じです。

NGA 2002/01/16(水) 11:41:16
CString szCPage = "2";
szCPage.Format("%d", atoi(szCPage) - 1);

TAKA 2002/01/16(水) 11:48:55
ページみたいなので、一桁ではない可能性があるので
参考程度に例です。

CString a;
int dt;

dt = atoi(a);
if (dt >= 0) {
    a.Format("%d",dt-1);
}
else {
  // エラー等
}

困った 2002/01/16(水) 12:58:11
ふむふむ、
format関数と、演算は一つの処理文でできるのですね。

TAKAさん、よくわかりましたね。
まさに、ページです。

皆さんありがとうございます。

NGA 2002/01/16(水) 13:10:09
>まさに、ページです。
ということなら、TAKAさんのソースのifの条件式は

>if (dt >= 0) {
if (dt >= 2) {

でしょうか。

古いスレッドには追加発言できません。