Thắc mắc về array

#include <iostream>
#include <string>
#include <stdio.h>

using namespace std;

int main()
{
    string num="";
    int arr[]={}; // []unkown array size, {}uknown values
    int maxsize;
    
    cin>>num; //num into array
    
    maxsize=num.size();
    for (int i=0; i<maxsize; i++)
    {if(arr[i] !=0; i < [maxsize-i-1])
    {cout << "Not a Palindrome"<< end;
    break;
    }if(i>=(maxsize-i-1))
    {cout <<"This is a Palindrome",,endl;
    break;
    }
    }
    

    return 0;
}

e không hiểu cái này lắm.
e mới chỉnh lại một chút cho giống hint rồi

bạn đã thử chạy đoạn mã đó chưa, chạy xem nó ra kết quả gì rồi up lên đây :stuck_out_tongue_winking_eye:

1 Like

cái này dựa trên 4 điều kiện mà hết 3 là C++ ko (cần) có:

  • thứ nhất là dựa trên flexible array là extension từ C :V C++ ko có.
  • thứ hai là dựa trên thứ tự stack, maxsize → arr → num, điều này là ko thể đảm bảo. Thứ tự biến trên stack là tùy trình dịch sắp xếp sao cho tối ưu.
  • thứ ba là dựa trên small string optimization (SSO) của các trình dịch, chuẩn C++ ko bắt buộc phải có.
  • thứ tư là num nhập vào phải nhỏ, ko quá 7/15 ký tự gì đấy tùy vào chương trình biên dịch ra chạy ở chế độ 32-bit hay 64-bit, và tùy vào implementation của SSO nữa :V

khi đã assume 4 điều kiện VÔ LÝ này đủ rồi thì code này có thể chạy:

--> chiều tăng dần địa chỉ
            num (24 byte nếu chương trình compile ở chế độ 64-bit, 12 ở 32-bit)
            ↓ 
[.][.][.][.][..........]
↑           ↑
maxsize     arr
(4 bytte)   (flexible array)

flexible array arr giống như con trỏ nhưng ko chiếm 8 byte bộ nhớ như con trỏ, và nó trỏ vào bộ nhớ tại vị trí khai báo của nó, mà ở đây vô tình là sau maxsize và đè lên phần bộ nhớ của num.

nếu num nhập vào nhỏ hơn ví dụ ở đây là chương trình 64-bit thì nhỏ hơn 15 ký tự và SSO của trình dịch này để num.size ở 8 byte cuối thì arr sẽ chiếm đúng các byte chứa nội dung nhập vào (nhỏ hơn 15 ký tự), nên xài arr[i] để truy cập num[i] được :V

còn cái code vòng for kia ko hiểu làm cái gì :V :V có so sánh gì đâu mà phán palindrome được :V

khi compile nhớ cho flag -pedantic vào diệt hết ba cái C extensions này nha :rage:

5 Likes

cái này e học trên trường, đề là “Write a program that prompts the user to input a set of integers called numbers. The program will then check if the set of integers is a palindrome or not. You may do so by
importing the set of integers into an integer array. A palindrome is a sequence of numbers
that reads the same forward and backwards.”
mà giáo viên cho hint như trên nên e k biết có đúng k với lại e k hiểu lắm với phần làm sao để bỏ số trong string vào array ấy và dấu chấm trong phần này nghĩa là gì vậy ạ?

maxsize=num.size(); dấu chấm đó nghĩa là gì vậy ạ

dấu chấm là truy cập thuộc tính/hàm của biến đó :V

mà e học tới đâu rồi mà giáo viên cho đề kia :V À mà cái code kia int array mà đè lên char array cũng đâu có nghĩa :V

đầu tiên em hỏi mảng cần nhập có bao nhiêu số, cin vào maxsize đó. Sau đó cấp phát động cho arr bấy nhiêu phần tử: int* arr = new int[maxsize] rồi cin >> arr[i] cho từng phần tử. Xài arr xong nhớ gọi delete[] arr tạo thói quen tốt :V

3 Likes

E mới bắt đầu học nên là k biết nhiều. Còn trên lớp e mới học về loop với array mà giáo viên cũng k giảng nhiều về phần này chỉ ví dụ mấy cái đơn giản thôi :frowning: !

đề nói numbers nhập vào là kiểu integer thì khai báo int num rồi cin>>num là được. Sau đó check các chữ số trong num có tạo thành dãy palindrome hay ko.

3 Likes

Input có string thì phải cin.getline rồi.

2 Likes

Đề bài đưa ra mâu thuẫn vậy?

=> Đảm bảo đầu vào là số.

=> Không chắc đầu vào luôn là số.

Tóm lại là vẫn dùng đến chuỗi thôi.
Sau khi nhập chuỗi thì xét:

  1. Chuỗi có phải là 1 chuỗi số hay không.
  2. Chuỗi số có đối xứng hay không.
2 Likes


?? :smiley:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?