Tôi vẫn còn mới đối với diễn đàn vì vậy tôi xin lỗi trước cho các vấn đề diễn đàn - nghi thức.Sự khác biệt giữa mảng/chuỗi int/char
Tôi không hiểu sự khác biệt giữa các mảng int
và char
. Gần đây tôi đã viết một chương trình cho một vấn đề Project Euler ban đầu sử dụng một mảng char
để lưu trữ một chuỗi số, và sau đó gọi là các ký tự cụ thể và cố gắng sử dụng các hoạt động int
trên chúng để tìm sản phẩm. Khi tôi sử dụng một chuỗi char tôi nhận được một sản phẩm vô cùng lớn, rõ ràng là không chính xác. Ngay cả khi tôi chuyển đổi những gì tôi nghĩ sẽ được biên dịch như một nhân vật (str[n]
) đến một số nguyên trong dòng ((int)str[n]
) nó đã làm điều tương tự. Chỉ khi tôi thực sự sử dụng một mảng số nguyên nó đã làm việc.
Mã là như sau
cho char
chuỗi
char str[21] = "73167176531330624919";
này đã không làm việc. Tôi có một câu trả lời khoảng 1,5 nghìn tỷ cho một câu trả lời đáng lẽ phải có khoảng 40k.
cho int
mảng
int str[] = {7,3,1,6,7,1,7,6,5,3,1,3,3,0,6,2,4,9,1,9};
Đây là những gì đã làm việc. Tôi cũng đã tắt quá trình truyền nội tuyến.
Bất kỳ giải thích nào về lý do tại sao những điều này hoạt động/không hoạt động và bất kỳ điều gì có thể dẫn đến hiểu rõ hơn về những ý tưởng này sẽ được đánh giá cao. Liên kết đến các công cụ hữu ích là tốt. Tôi đã nghiên cứu chuỗi và mảng và con trỏ rất nhiều (của riêng tôi) (tôi tự học như tôi đang học trung học) nhưng các khái niệm vẫn còn khó hiểu.
Câu hỏi phụ là các chuỗi trong C được lưu trữ tự động dưới dạng mảng hay chỉ có thể thực hiện như vậy?
Có lẽ [bảng này] (http://www.asciitable.com) có thể làm sáng tỏ việc bạn xử lý các ký tự ascii dưới dạng giá trị 'int'. Và có, nếu bằng 'mảng' bạn có nghĩa là bộ nhớ tiếp giáp có chứa các dữ liệu ký tự cơ bản, chúng được lưu trữ như vậy (với một 0 terminator ngầm tacked trên). – WhozCraig
bảng đó có nói rằng char '0' tương ứng với giá trị int là 48 không? – Charles
Có, mặc dù giá trị chưa được ký, điều này có vẻ không quan trọng nhưng sẽ là như vậy nếu bạn cần xử lý các ký tự ascii mở rộng (xem bảng ngay bên dưới ký tự đó). Bạn đang đi đúng hướng. Một số câu trả lời dưới đây mô tả điều này tốt hơn. Cũng lưu ý rằng điều này ('0' == 48) chỉ đúng đối với ASCII. Có các bộ ký tự phụ thuộc vào hệ thống khác (chẳng hạn như [EBCDIC] (http://en.wikipedia.org/wiki/EBCDIC)). – WhozCraig