2010-04-08 42 views
6

Có thể nhân một char bằng một int không?Nhân char theo số nguyên (C++)

Ví dụ: tôi đang cố tạo biểu đồ, với * cho mỗi lần một số xuất hiện.

Vì vậy, một cái gì đó như thế nào, nhưng điều này không làm việc

char star = "*"; 
int num = 7; 

cout << star * num //to output 7 stars 
+1

@dubya, C++ thẻ là hữu ích hơn nhiều so với ở đây 'giúp đỡ'. Để bắt đầu, chúng tôi có thể giả sử bạn cần trợ giúp bởi vì, tốt, bạn đang đặt câu hỏi tại đây :-) – paxdiablo

Trả lời

21

tôi sẽ không gọi đó là hoạt động "nhân", đó chỉ là khó hiểu. Ghép nối là một từ tốt hơn.

Trong mọi trường hợp, lớp chuỗi chuẩn C++, có tên là std::string, có hàm tạo hoàn hảo cho bạn.

string (size_t n, char c); 

Nội dung được khởi tạo như là một chuỗi hình thành bởi một sự lặp lại của nhân vật c, n lần.

Vì vậy, bạn có thể đi như thế này:

char star = '*'; 
int num = 7; 
std::cout << std::string(num, star) << std::endl; 

Hãy chắc chắn bao gồm tiêu đề có liên quan, <string>.

+3

+1 để tham khảo thư viện std. Quá ít người làm điều đó những ngày này. – Randolpho

+3

"Ghép nối" cũng là một từ xấu. Không thực sự là một từ cho việc này, nhưng 'lặp đi lặp lại' tôi nghĩ đến gần hơn, vì đó thực sự là những gì bạn phải làm để đạt được kết quả mong muốn. – SoapBox

+1

Đó là 'sự xúc' khi tôi viết nó. – janks

6

cách bạn đang làm nó sẽ làm một phép nhân số của biểu diễn nhị phân của nhân vật '*' so với số 7 và đầu ra số kết quả .

gì bạn muốn làm (dựa trên mã C++ nhận xét của bạn) là thế này:

3

Bạn có thể làm điều này: quá eningeering của vấn đề này

std::cout << std::string(7, '*'); 
6

GMAN của cảm hứng cho tôi để làm một số mẫu meta-lập trình để tiếp tục quá kỹ sư nó.

#include <iostream> 

template<int c, char ch> 
class repeater { 
    enum { Count = c, Char = ch }; 
    friend std::ostream &operator << (std::ostream &os, const repeater &r) { 
    return os << (char)repeater::Char << repeater<repeater::Count-1,repeater::Char>(); 
    } 
}; 

template<char ch> 
class repeater<0, ch> { 
    enum { Char = ch }; 
friend std::ostream &operator << (std::ostream &os, const repeater &r) { 
    return os; 
    } 
}; 

main() { 
    std::cout << "test" << std::endl; 
    std::cout << "8 r = " << repeater<8,'r'>() << std::endl; 
} 
+2

Ah, một bộ phận lập trình meta cho tôi trả lời. Xuất sắc nhất. 1 (Cẩn thận, bạn sẽ nhận được bình chọn cho là quá "thông minh") – GManNickG

+0

@GMan Vì vậy, bằng cách sử dụng một xây dựng trong std :: string constructor là ít có thể đọc được cho một vòng lặp, nhưng điều này xứng đáng một +1 từ bạn? – joshperry

+0

@ josh: Nếu bạn chưa bao giờ thấy câu trả lời của tôi, và sự ngu xuẩn được thể hiện bởi một số người dùng về câu hỏi này (và do đó tôi trả lời cho ngu ngốc đó), điều này sẽ không có ý nghĩa. – GManNickG

0

Tuyên bố nên là:

char star = "*"; 

(sao * num) sẽ nhân giá trị ASCII của '*' với giá trị được lưu trữ trong num

Để đầu ra '*' n lần , hãy làm theo ý tưởng của những người khác.

Hy vọng điều này sẽ hữu ích.

0
//include iostream and string libraries 

using namespace std; 

int main() 
{ 

    for (int Count = 1; Count <= 10; Count++) 
    { 
     cout << string(Count, '+') << endl; 
    } 

    for (int Count = 10; Count >= 0; Count--) 
    { 
     cout << string(Count, '+') << endl; 
    } 


return 0; 

}

Các vấn đề liên quan