2016-12-14 29 views
1

私はこのフォーラムには新規であり、何か助けを求めていますが、どんな助けでも大歓迎です!私はプログラミングのファンダメンタルズ1クラスのためにこの課題に取り組んでいます。私は何時間も立ち往生しているので、この時点では絶望的です。ありがとうございました。C++電話番号プログラム

ここにプロンプ​​トが表示されます。 多くのWebサイトで電話番号を要求しています。問題は、多くの電話番号を表現する方法が非常に多いことです。 例としては、817-555-1234, 817 555 1234(c)および(817)555-1234 x23が挙げられる。 を任意の形式の電話番号を含む文字列を入力して標準 形式で出力するC++プログラムを作成します。この割り当ての場合、標準フォーマットは(817)555-1234です。 あなたのC++プログラムは、必要があります。 1.入力、別の文字列 3.問題への入力文字列から数 2.コピーのみの数字を含む文字列は、エラーメッセージが入力された文字列は、正確に10 桁 4が含まれていない場合。電話番号を標準形式で出力してください

#include "stdafx.h" 
#include "stdafx.h" 
#include <iostream> 
#include <iomanip> 
#include <string> 
#include <cctype> 
using namespace std; 

const int NUM_LENGTH = 10; 

string ReadAndValidateUserNumber(string userNumber); 

int main() 
{ 
    string userNumber; 

    ReadAndValidateUserNumber(userNumber); 

    system("PAUSE"); 
    return 0; 
} 

string ReadAndValidateUserNumber(string userNumber) 
{ 
    bool check = false; 

    while (!check) 
    { 
     check = true; 

     cout << "Please enter a Number: "; 
     cin >> userNumber; 

     if (userNumber.length() != NUM_LENGTH) 
      cout << "The phone number may contain 10 digits only. \n"; 

     else 
     { 
      userNumber.insert(0, "("); 
      userNumber.insert(4, ")"); 
      userNumber.insert(8, "-"); 

      for (int i = 0; i < userNumber.length(); i++) 
      { 
       if (isdigit(userNumber[i])) 
       { 
        userNumber = NUM_LENGTH; 
       } 
      } 
     } 

     if (!check) 
     { 
      cout << "Invalid Entry! Please try again." << endl; 
     } 
    } 

    return userNumber; 
} 
+2

エラーは何ですか?正しい行動は何ですか?悪い出力の例?具体的にする。これは人々にあなたのためのコードを書くように求める場所ではありません。 – Incomputable

+0

私はお詫び申し上げます。たとえば、10桁の数字「1123456789」だけを入力すると、任意のキーを押して続行します。私が "123-456-9999"のようなものを入力した場合、エラーには10桁の数字しかないと言います。 – bmoney

+0

プログラムは(123)456-9999の形式で番号を吐き出すようにします。私はちょうど方法を把握できません、また、文字列から数字だけを抽出し、文字を無視するために "isdigit"を使う方法もあります。 – bmoney

答えて

0

コードはひどい状態です。落ち着いてフォーカスしてください。あなたが書いたもの以外にも多くの問題があります。作業コードをコードレビューサイトに運ぶことをお勧めします。

あなたはチェックが間違っているだけでなく、チェックが間違っているとやっていることも間違っています。あなたが内部userNumber奇妙な何かを持ってますので

userNumber = NUM_LENGTH; 

これは、文字にNUM_LENGTHが切り捨てられます。

これは、右のチェックです:

  if (!isdigit(userNumber[i])) 
      { 
       std::cout << "input should be only numbers\n"; 
       return; //function should return void 
      } 

が^^これはあなたが別の文字列にstd::copy_ifを使用することができ、あなたは非番号入力でブレークしたい場合は、非数字をスキップしたい場合は、何をすべきかであります、またはあなたのためにそれを行うために上記のものを微調整してください。数字以外のものを削除する場合は、std::remove_ifを使用することもできます。

std::string fetched_input; 
std::copy_if(userNumber.begin(), userNumber.end(), fetched_input.begin(), std::isdigit); 

^^これは数字だけの文字列です。

また、正しい場所で点検を行っていません。それについてもう一度考えてみてください。

0

ロジックエラーがあるようです。

bool check = false; 

while (!check) 
{ 
    check = true; 

    .... 

    if (!check) 
    { 
     cout << "Invalid Entry! Please try again." << endl; 
    } 
} 

チェックが再びfalseになることはありません。したがって、bottom if文は決して実行されず、checkは常に真であるため、ループは2回以上反復されません。

check = true 

正しい形式で入力してください。