2017-05-18 18 views
0

に文字列の文字を入れる基本的に、私は数字のフルこれは本当に長い文字列を持っていますこの文字列内の2つの連続した数字文字の別名アレイ):はint型

sum = number[i] + number[i+1]; 

しかし、これは、ガベージ値を返し、正しい結果を生成しません。

printf("%c", number[i]); 

しかし、どのように私はこの%cは上記のように計算で使用するために取得することができます:私は、例えばprintf関数で単一の値を抽出する方法を知っていますか?私はatoiを試しましたが、 "エラー:互換性のない整数のポインタ変換に 'char'を 'const char *'型のパラメータに渡します;アドレスは&"としてください。

+0

あなたはstrtolはを使用してみましたか? – Module

+1

<任意のタイプの文字> - '0'は整数型の数値を返します。 – codelyzer

+0

あなたは本当にこのような何かを持っています: 'char * number =" 4544551144455444551 ";'?ご確認ください。 –

答えて

8

1)atoiあなただけの1 ACSIIの文字を0に変換したい場合)は、文字列ではなく、単一の文字

2を受け入れる - 9をちょうど次のコードを使用し

if(rChar >= '0' && rChar <= '9') 
    val = rChar - '0'; 
+0

これは、C標準に準拠する任意の文字セットとエンコーディングで動作します。 ASCIIだけではありません。 –

+0

このコードは、データフローロジックに問題を設定します。 'val'は不確定で、おそらく' if'文の前後で意味を持ちません。言い換えれば、 'val'で何が行われたとしても、本当のブランチで実行されなければならないので、真のブランチでC99-'val'を宣言する必要があります。 –

0

atoi変換文字列(const char*)へのint、それにcharを入力しても機能しません。あなたは整数型で、その番号を取得するために「0」からその数を引くことができ、データ型charとして表現される任意の数の

char c = '9' 
int v = c - '0'; // v == 9 
2

:溶液は、intcharは、ASCIIテーブルを使用することで変換します。例えば

char a = '5'; 
int num = a - '0'; 
//num will store 5 

この作品はなぜ?

「5」のASCII値をチェックすると53になり、「0」の場合は48になります。違いは5です。これは文字形式の任意の数値を整数に変換するために機能します。

'0'のASCII値は48、 '1'のASCII値は49などです。したがって、 '0'からの減算はASCII値の差を与えます。ここで

はASCII値へのリンクです:http://www.asciitable.com/

3

おそらく、この欲しい:

char *number = "123"; 

int n = 0; 
char c; 
for (int i = 0; c = number[i]; i++) 
{ 
    n += number[i] - '0'; 
} 

printf("n = %d\n", n); 
+0

まさに私が望んでいたもの。私はこれまでの答えからこれを理解することができましたが。しかし、ありがとう! – GrumpyKitten

+0

この種の条件: 'c = number [i]'はforループを止めることができますか? '\ 0'で? –

+0

@CasimiretHippolyteはい。 'c = number [i]'の値は '\ 0'(= 0)なので、forは終了条件が' 0'になるので停止します。 –

関連する問題