2017-11-03 12 views
-3

関数を使用して、次のコードでchar型の変数dateの合計を生成しようとしています。しかし、そうすると、このエラーメッセージが返されます:test.cpp:9:25: error: invalid conversion from ‘char’ to ‘const char*’ [-fpermissive]と私は問題が何であるか把握していないようです。charを整数に変換しようとしています

#include <iostream> 

using namespace std; 

int calcNumber(const char* date, const int arraySize) 
{ 
    int sum(0); 
    for (int count=0; count<arraySize; count++) { 
     sum += atoi(date[count]); 
    } 
    return sum; 
} 
int main() 
{ 
    char date[] = "131083"; 

    cout << calcNumber(date, sizeof(date)/sizeof(date[0])); 
} 
+0

は;'代わりにあなたの関数。 – user0042

+0

@ user0042申し訳ありませんが、私は間違って言いました...数字の配列を繰り返し、合計して合計を加算しようとしています – isak

+0

ここをクリックしてください[std :: atoi()](http:// en .cppreference.com/w/cpp/string/byte/atoi)が動作します。 'sum + = date [count] - '0';' – user0042

答えて

1

std::atoi機能がconst char*種類を期待しています。 []演算子を使用してタイプconst char*のポインタを参照解除するときは、charタイプを指定しています。それはあなたが\0ヌル終端文字とあなたのcount <= arraySize条件に対処するためにあなたの文字配列-1の長さを決定するためにstd::strlen機能があり必要なものとされている:単に `atoi関数(日付)を使用

#include <iostream> 

int calcNumber(const char* date, const size_t arraySize) { 
    int sum = 0; 
    for (int count = 0; count <= arraySize; count++) { 
     sum += date[count] - '0'; 
    } 
    return sum; 
} 
int main() { 
    const char* p = "1234"; 
    std::cout << calcNumber(p, strlen(p) - 1); 
} 
+0

問題の内容を説明してくれてありがとう、ありがとう! – isak

+1

優れた答え!どうもありがとうございます! 'tes.cpp:6:31:warning:符号付き整数式と符号なし整数式の比較[-Wsign-compare]'質問の量はおかげで申し訳ありません、ここで初心者です! – isak

1

date[count]おそらく'3'(すなわちASCIIコード51であり、それは、(char)51と同じである)、単一charあります。

(例えば3)、(もちろん '0'date[count]-'0'

char定数リテラルで使用少数にそれを変換するには、その値は、ASCII 48であり、ASCIIコード化は、数字のグリフであるようなものです連続するコードによってコード化される)。

ところで、0バイト(すべての文字列を終了)で停止したいと考えています。だから、その後、あなたも任意のarraySizeを渡す必要はありません

for (int count=0; date[count] != (char)0; count++) { 
    sum += atoi(date[count]); 
} 

を使用することができます。

実際には、(悪い)std::atoi(またはstrtol)を再発明しています。 calcNumberは、"2X"のような文字列を間違って処理します(ただし、std::atoi("2X")は2を意味します)。そして、あなたのcalcNumber"-34"または" 1"にひどく振る舞う....

+0

動作していないようですが、同じエラーが発生します。 – isak

+1

@isak _ "でも同じエラーが発生する可能性があります_ _ありそうもありません。 – user0042

+1

user0042オッズはisakが 'sum + = atoi(date [count] - '0');'しようとしているのと同じエラーを受け取ります。 @isak、もしあなたが必要とするのは、 'sum + = date [count] - '0';'です。 'atoi'は必要ありません。 – user4581301

関連する問題