2010-03-18 19 views
6

Điều tôi đang bối rối là về hàm isNumPalindrome(). Nó trả về một giá trị boolean của true hoặc false. Làm thế nào tôi có thể sử dụng để tôi có thể hiển thị nếu nó là một palindrome hay không. Ví dụ: if (isNumPalindrome == true) cout << "Your number is a palindrome"; else cout << "your number is not a palindrome.";Tôi vừa học về các hàm C++; thế nào tôi có thể sử dụng nếu các câu lệnh trên các giá trị trả về hàm?

#include "stdafx.h" 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
return 0; 
} 

#include <iostream> 
#include <cmath> 

using namespace std; 

int askNumber(); 
bool isNumPalindrome(); 

int num, pwr; 

int main() 
{ 
askNumber(); 

return 0; 
} 

bool isNumPalindrome() 
{ 
int pwr = 0; 

if (num < 10) 
    return true; 
else 
{ 
    while (num/static_cast<int>(pow(10.0, pwr)) >=10) 
    pwr++; 
    while (num >=10) 
    { 
    int tenTopwr = static_cast<int>(pow(10.0, pwr)); 

    if ((num/tenTopwr) != (num% 10)) 
    return false; 
    else 
    { 
    num = num % tenTopwr; 
    num = num/10; 
    pwr = pwr-2; 
    } 
    } 

    return true; 
} 
} 

int askNumber() 
{ 
cout << "Enter an integer in order to determine if it is a palindrome: " ; 
cin >> num; 
cout << endl; 

if(isNumPalindrome(num)) 
{ 
cout << "It is a palindrome." ; 
cout << endl; 
} 
else 
{ 
cout << "It is not a palindrome." ; 
cout << endl; 
} 
return num; 
} 
+7

Wow, cho ai đó chỉ tìm hiểu về chức năng bạn đã viết khá đẹp C++. Làm tốt. –

+0

Haha cảm ơn. Tôi chỉ có lớp học này vì vậy tôi dành nhiều ngày chỉ thực hành mã -_ -... – Sagistic

+0

Đã chỉnh sửa: Hoạt động ngay bây giờ, nhưng vẫn phải sửa phần biến toàn cục. – Sagistic

Trả lời

11

Giá trị trả lại cho một chức năng có thể được sử dụng giống như một biến cùng loại.

chương trình chính của bạn sẽ trông như thế này:

int main() 
{ 
    int num=askNumber(); 
    bool isPal=isNumPalindrome(num); 
    if (isPal) 
    { 
    //do something 
    } 
    else 
    { 
    //do something else 
    } 

    return 0; 
} 

hoặc bạn có thể còn ngắn gọn hơn:

int main() 
{ 
    if (isNumPalindrome(askNumber())) 
    { 
    //do something 
    } 
    else 
    { 
    //do something else 
    } 

    return 0; 
} 

Những gì bạn không muốn làm là sử dụng các biến toàn cầu bạn định nghĩa . Trong các chương trình phức tạp hơn sẽ là một công thức cho thảm họa.

Edit: bạn sẽ muốn chắc chắn bạn chỉnh sửa chức năng isNumPalindrome bạn để chấp nhận số nó làm việc với:

bool isNumPalindrom(int num) 
{ 
    ... 
} 
+0

tôi có nên đặt các biến đó trong int main() không? Điều đó có tạo thành biến không phải là mô-đun/toàn cục và được bản địa hóa hay không. – Sagistic

+0

có, bạn đặt các biến là địa phương thành chính, và sau đó chính sẽ chuyển chúng vào các chức năng cần nó. – miked

+0

+1 để hiển thị cách gán giá trị của hàm cho biến –

8

Có, bạn có thể làm như vậy.

Trên thực tế bạn có thể làm chỉ là ...

if (isNumPalindrome()) { ... } 
2

khi một hàm trả về một loại mà bạn có thể nghĩ đến chức năng đó như được thay thế bằng giá trị trả về và gõ. để dành cho bạn:

isNumPalindrome() -> {true/false}

vì vậy bạn có thể viết ví dụ:

if(isPalindrome()) 
    cout<<"it is!"<<endl; 
else 
    cout<<"it is not :("<<endl; 
4
if(isNumPalindrome()) 
{ 
    cout << "Your number is a palindrome"; 
} 
else 
{ 
    cout << "Your number is not a palindrome"; 
} 
0

Bạn có thể gọi isNumPalindrome() bên askNumber(), và có giá trị trả về từ isNumPalindrome() được sử dụng trong một thử nghiệm có điều kiện. Nó tốt hơn để vượt qua num như một cuộc tranh cãi để isNumPalindrome mặc dù: isNumPalindrome (int num)

int askNumber() 
{ 
cout << "Enter an integer in order to determine if it is a palindrome: " ; 
cin >> num; 
if(isNumPalindrome(num)){ 
    cout << "it is a palindrome"; 
} 
cout << endl; 

return num; 
} 

sau đó chính có thể gọi chỉ askNumber()

2

Trước tiên, bạn shouldn't use globals cho numpwr; bạn nên vượt qua chúng như các đối số chức năng:

bool isNumPalindrome(int num); 
... 
num = askNumber(); 
isNumPalindrome(num); 

Thứ hai, không cần phải so sánh một giá trị boolean với true (hoặc false); chỉ cần sử dụng giá trị boolean.

Thật khó để biết bạn đang cố gắng sử dụng cú pháp chính xác nào trong câu lệnh "if" của bạn, nhưng một điều bạn không thể làm là có câu lệnh "if" trong biểu thức. Trong C++, có các biểu thức và câu lệnh. Biểu thức có giá trị; báo cáo không.

// valid 
if (isNumPalindrome(num)) { 
    std::cout << '"' << num << "\" is a palindrome." << std::endl; 
} else { 
    std::cout << '"' << num << "\" is not a palindrome." << std::endl; 
} 

// invalid 
std::cout << '"' << num << (if (isNumPalindrome(num)) { 
    "\" is a palindrome."; 
} else { 
    "\" is not a palindrome."; 
}) << std::endl; 

// valid, but not recommended 
std::cout << '"' << num << "\" is " << (isNumPalindrome(num) ? "" : "not ") << "a palindrome." << std::endl; 

Đối với toán tử bậc ba (?:), hãy đọc "To ternary or not to ternary?"

+0

Tôi nhận được một loạt lỗi khi tôi đặt các biến trong chính. – Sagistic

+0

hầu hết trong số đó là biến số địa phương không được tham chiếu và không được khai báo. – Sagistic

+1

Chức năng có phạm vi riêng của chúng, chúng không thấy bất kỳ biến nào được khai báo bên ngoài chúng, trừ khi bạn chuyển chúng thành đối số. –

0

Trong một câu duy nhất:

"Khi tình trạng của nếu tuyên bố bạn có thể sử dụng bất kỳ biểu hiện kết quả, một lần khi biểu hiện được đánh giá, có thể ẩn hoàn toàn được chuyển thành 'bool'. "

2

Như nhiều người đã nêu, giá trị trả về của hàm về cơ bản sẽ trở thành giá trị của hàm.

Dưới đây là ví dụ về thao tác ba giây để in kết quả.

cout << "The number " << (isNumPalindrome()) ? "is a palindrome" : "is NOT a palindrome"; 

Điều này hơi kỳ lạ khi tìm nhiều người mới bắt đầu, nhưng nó cho thấy cách sử dụng toán tử ba năm để in câu trả lời có điều kiện.

0

chưa một giải pháp ;-)

#include <iostream> 
#include <sstream> 
#include <algorithm> 

bool is_palindrome(const int num) 
{ 
    std::ostringstream os; 
    os << num; 
    const std::string& numStr = os.str(); 
    std::string reverseNumStr = numStr; 
    std::reverse(reverseNumStr.begin(), reverseNumStr.end()); 
    const bool result = (numStr == reverseNumStr); 
    return result; 
} 

int main() 
{ 
    int num = 0; 
    std::cout << "Enter an integer in order to determine if it is a palindrome: "; 
    std::cin >> num; 

    std::string inset; 
    if(!is_palindrome(num)) 
    { 
     inset = "not "; 
    } 
    std::cout << "It is " << inset << "a palindrome." << std::endl; 
} 
Các vấn đề liên quan