2012-03-09 15 views
1

私は宿題に取り組んでいますが、私はこの問題に悩まされています。ユーザーに整数を入力させ、数字の個々の数字と数字の合計を出力するプログラムを作成します。例えば、出力3456の個々の数字[...]、6543として、出力40000004 として、および-2345 5432としての個々の桁べきです。ここで整数を入力し、C++で間隔を空けて出力しますか?

は、これまでの私のコードです:

int main() 
{ 
    string a;  //declares string 

    cout << "Type an integer: ";  //prompts user to input an integer 
    cin >> a;    //stores into string a 
    cout << "There are " << a.size() << " digits in " << a << endl; //retrieves length of string a 

    cout << a.at(0); 

    cout << endl; 

    system ("pause");  //pauses the system so user can read the screen 
    return 0;  //returns 0 if program works properly 

}

誰もが、私は私の次のステップは/何が間違っやっているものに私を啓発することができますか?

+3

プログラミングの旅に最適ですが、「何か」と言うコメントを書かないでください。あなたが何かそのように書いた理由を説明したいときにコメントを書いてください。 – AraK

+0

あなたが実装しようとしているロジックを英語で説明してみませんか?ライン・バイ・ラインのコメントスタイルではなく、概要として。 –

+0

ヒント:整数を数字に分割するには、モジュラス演算子を調べます。 – chris

答えて

0

おそらく、数字を文字列として入力するとよいでしょう。これにより、数字による処理を行うことができます。その後、ユーザーは数字ではなく1回だけ数字を入力します。

+0

私はそれをforループで実行しようとしましたが、各整数に何桁の数字が入るかを予測する方法はありません。なぜ、forループを作成して、カウンターは<=桁数でした。しかし、私はまだ多くの変数を知っている必要があります。 –

+0

std :: stringを使用することはできますか? – chris

+0

@RhondaWin:文字列には長さ(文字数)のプロパティがあります。これは 'size()'メソッドを通してアクセス可能です。これを使用して、文字列内の桁数を調べることができます。 'at()'を使うと、文字列中のある点の文字を見つけることができます(インデックスは0から始まります)。 – Linuxios

0

あなたは、コードのこの部分を試みることができる:

int num = 0; 
    cin>>num; 

    //Make sure array is large enough to hold all digits 
    //For an int 10 digits it the max 
    int digits[10] = {0}; 

    //This variable tracks the count of actual number of 
    //digits extracted from user input 
    int digitCount = 0; 

    while (num > 0) 
    { 
     digits[digitCount] = num % 10; //Extract digit at units place 
     num = num/10;     //Advance through the number 
     digitCount++; 
    } 

    for(int count= digitCount-1 ; count >= 0; count--) 
    { 
     cout<<digits[count]<<" "; 
    } 

ノートを印刷ループが逆方向に動作すること(すなわちdigitCountからzeroまで)の数字を抽出し、ユニットの場所から格納されているため。数字の場合は12345のようにdigitsの配列には5 4 3 2 1が含まれます。

+0

まだ配列をどうやって作るのかわかりません(実際にこのコースの最後にあります) –

+0

Ok、手元にある入力の桁数は分かりますか?もしそうなら、あなたは次のようなものを試すことができます: 'cout << num/10000 <<" "<< num/1000%10 <<" "<< num/100%100%10 <<" "<< num/10% 1000%100%10 << "" << num%10000%1000%100%10 << endl; '([here](http://www.dreamincode.net/forums/topic/57975-algorithm-forを参照)詳細については、「数字の抽出」を参照してください)。また、itoaのような文字列操作関数を使用することができますか? –

+0

いいえ、分かりません。プログラムは、そこに置かれている整数を分割することができます。 –

0

ロンダ、私はあなたの欲求不満を理解することができますが、コンピュータはそうです...彼らはあなたが言うことをします。

あなたのプログラムは数字の各数字を出力する必要がありますが、あなたのプログラムはユーザに各数字の入力を求めます。それは混乱しています。

また、あなたが最初に「NUM」ここ

cin >> num; 

、あなたは、この行に「NUM」を上書きし

cin >> num >> a; 

私はあなたがここで行うには何を意味するかわからないに値を代入しかし、あなたがコンピュータにすることを指示しているのは、入力から整数を読み込み、それをnumに割り当て、残りの文字列を文字列 "a"に代入することです。残りの行にスペースは破棄され、セパレータとして機能します。それはおそらくあなたも混乱させるでしょう。

+0

私はnumとaに格納できるように数字を入力するようユーザーに求めました。それは、必要な変数の数が決して分からないことに気づいた時点で、.cppを保存して、それを挫折から取り除いただけです。 –

+0

std :: vectorについて学んだことがありますか? – amdn

+0

いいえ、まだベクトルについて学んだことはありません –

0
int main() 
{ 
    int runningTotal = 0; 
    std::string inputString; 
    std::cin >> inputString; 
    for (std::string::iterator _it = inputString.begin(); 
           _it != inputString.end(); ++_it) 
    { 
     // *_it now represents an individual char of the input string 
     char a = *_it; char* b = &a; 
     if (a != '-') 
     { 
      runningTotal += atoi(std::string(b).c_str()); 
      std::cout << *_it << " "; 
     } 
    } 
    std::cout << std::endl << "Total of all digits: " << runningTotal << std::endl; 
    std::cin.get(); 
    std::system("pause"); 
    return 0; 
} 

私はこれをすばやく投げました。それが助けてくれることを願っています。

+0

うわー、これは本当に複雑で、私の教授はこれが私たちが学んだことを超えていることを認識すると思います。とにかくありがとうございました! –

+0

あなたが好きなら、私はそれをさらに説明してもらえますが、あなたが言うように、これは提出された宿題であれば、まだ教えられていなければ教授に質問するでしょう;) –

+0

正確です。私はちょうど1月の終わりに始めましたので、私はあまり知らないです –

1

ので、手順は...入力

  • は、合計して表示アウトスペース
  • 数字で区切られた1つですべて1
  • ことをそれらを表示

    1. 店です。

      #include<string> 
      #include<iostream> 
      using namespace std; 
      int main() 
      { 
          string a; 
      
          cout << "Type an integer: "; 
      
          // 1. store the input 
          cin >> a; 
      
          // 2. display them all one by one separated by spaces 
          for(int i=0;i<a.size();++i) 
           cout << a[i] << ' '; 
          cout << endl; 
      
          // 3. figure out the sum and display that 
          int total = 0; 
          for(int i=0;i<a.size();++i) 
           total += a[i] - '0'; 
          cout << total << endl; 
      
          system("pause"); 
          return 0; 
      } 
      

      トリッキーな部分は、3

      total += a[i] - '0'; 
      

      [i]は文字であること、たとえば言うことができますステップで正しい合計を取得している「4」。文字 '4'のASCII値は52に相当する整数で、 '0'に相当するASCII整数は48です。したがって '4' - '0'を取ると、4の差が得られます。この場合、我々が探している整数表現です。

      Hereは、文字値を持つ簡単なASCIIチャートです。

      希望すると便利です。

    関連する問題