2016-12-14 727 views
1

我是新來這個論壇,並期待一些幫助,任何幫助將不勝感激!我被困在這個作業中,因爲我的編程基礎1課,而且在這一點上絕望,因爲我一直堅持了幾個小時。謝謝。C++電話號碼程序

以下是提示: 許多網站都要求輸入電話號碼。問題是有很多不同的方式來表示電話號碼。例子包括817-555-1234, 817555 1234(c)和(817)555-1234 x23。編寫一個C++程序,輸入包含任何格式電話號碼的字符串 ,並以標準 格式輸出。對於這項任務,標準格式是(817)555-1234。 你的C++程序應: 1.輸入包括數字 2.複製只從輸入字符串的數字到另一個字符串中 3.發出一個串中的錯誤消息,如果輸入字符串不包含正好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 = NUM_LENGTH; 

這將截斷NUM_LENGTH成char,所以你有一些奇怪的內部userNumber

這是正確的檢查:

  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; 
    } 
} 

你會注意到檢查再也不會變成假。因此,if語句的底部將永遠不會執行,並且循環永遠不會重複多次,因爲檢查總是如此。您可能想要製作

check = true 

以輸入正確格式爲條件。