سوالی در مورد مرتب سازی چند متغیر استرینگ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

سوالی در مورد مرتب سازی چند متغیر استرینگ

0 امتیاز
سوالی بسیار ابتدایی دارم متاسفانه چون آشنایی به زبان سی پلاس پلاس ندارم نمیتونم حلش کنم.
البته چند روزی هست در حال یادگیری این زبان هستم اما فرصت محدودی برای جواب این سوال ساده دارم. ممنون اگر راهنماییم کنید. البته سوال ساده ای هست و چند خط کد بیشتر نمیشه به نظرم
سوالم این هست که چند مقدار زیر رو داریم مثلا
cd2 = m d u 2023.06.06 21:05
cd3 = m d u 2023.06.06 21:06
cd4 = m d u 2023.06.06 21:03
cd5 = m d u 2023.06.06 21:08
cd6 = m d u 2023.06.06 21:07
cd7 = m d u 2023.06.06 21:04

 

شش تا مقدار که حروف اول و تاریخ مثلا شبیه هم هستن که تاریخ می تونه متفاوت باشه و همینطور ساعت هم می تونه متفاوت باشه.
چطور میشه اینها رو مرتب کرد که از نزدیک ترین تایم به دور ترین تایم باشه. مثلا خط چهارم که ساعت 21:08 رو نشون میده اول از همه بیفته. همون از بزرگ به کوچک مرتب بشه. در نهایت هم بزرگترین که نزدیک ترین تایم هست که میشه متغیر شماره ی cd5 چاپ بشه.
آیا باید توی حلقه ی for ریخته بشه و بعد توی آرایه ذخیره بشه و بعد عملیات روش انجام بشه یا باید از طریق دیگری انجام بشه . البته از طریق for و ریختن داخل آرایه رو هم نمیدونم به چه شکل هست.
ممنون اگر من رو راهنمایی بفرمایید و یا اگر کدش ساده و کوتاه هست اون رو به من بدین. خیلی سادس اما یاد ندارم متاسفانه و بسیار نیاز دارم طی چند روز آینده.
خیلی ممنون و تشکر   
سوال شده مهر 7, 1402  بوسیله ی ژینوس (امتیاز 19)   1 3

1 پاسخ

0 امتیاز

بله، می‌توانید از یک آرایه برای ذخیره‌سازی این مقادیر استفاده کنید و سپس آن را مرتب کنید. در زبان برنامه‌نویسی C++، می‌توانید از کتابخانه <algorithm> و تابع sort استفاده کنید. اما برای اینکه بتوانید تاریخ و زمان را مقایسه کنید، باید آن‌ها را به یک فرمت قابل مقایسه تبدیل کنید. در اینجا یک نمونه کد برای شما آورده‌ام:

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>

// تعریف یک ساختار برای نگهداری اطلاعات
struct Data {
    std::string value;
    std::string date;
    std::string time;
};

// تابع مقایسه برای مرتب‌سازی
bool compare(const Data& a, const Data& b) {
    if (a.date == b.date) {
        return a.time > b.time;
    }
    return a.date > b.date;
}

int main() {
    // ایجاد یک آرایه از داده‌ها
    std::vector<Data> data = {
        {"cd2", "2023.06.06", "21:05"},
        {"cd3", "2023.06.06", "21:06"},
        {"cd4", "2023.06.06", "21:03"},
        {"cd5", "2023.06.06", "21:08"},
        {"cd6", "2023.06.06", "21:07"},
        {"cd7", "2023.06.06", "21:04"}
    };

    // مرتب‌سازی داده‌ها با استفاده از تابع مقایسه
    std::sort(data.begin(), data.end(), compare);

    // چاپ داده‌ها
    for (const auto& d : data) {
        std::cout << d.value << " = m d u " << d.date << ' ' << d.time << '\n';
    }

    return 0;
}

این کد، داده‌ها را براساس تاریخ و سپس زمان مرتب می‌کند. اگر دو داده تاریخ یکسان داشته باشند، آن داده‌ای که زمان بعدتری دارد در نمایش اول خواهد آمد.

 

پاسخ داده شده مهر 7, 1402 بوسیله ی zirak (امتیاز 473)   3 28 52
...