gooブログはじめました!

写真付きで日記や趣味を書くならgooブログ

User c++プログラムで #define AAA "hello" #define BBB "world" #define CCC AAA BBBということは出来ますか?

2023-05-23 08:24:00 | 日記

#defineディレクティブでは、テキストの置換が行われます。そのため、マクロCCCを定義する際にAAABBBを連結したい場合、マクロ展開のタイミングで正しい結果を得るためには、さらに追加のテキストマクロを使用する必要があります。

以下に例を示します。

#include <iostream>
using namespace std;

#define AAA "hello"
#define BBB "world"
#define CONCATENATE_STR(str1, str2) (str1##str2)
#define CCC CONCATENATE_STR(AAA, BBB)

int main() {
    cout << CCC << endl;  // "helloworld" と出力される
    return 0;
}


気まぐれ

2023-05-23 06:10:00 | 日記
#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>
#include <cstring>

// Wi-Fiアクセスポイントの情報を格納する構造体
struct WiFiAccessPoint {
    std::string ssid;
    std::string mode;
    std::string channel;
    std::string signal;
    std::string security;
};

// 文字列を指定のデリミタで分割するヘルパー関数
std::vector<std::string> splitString(const std::string& str, char delimiter) {
    std::vector<std::string> tokens;
    std::stringstream ss(str);
    std::string token;
    while (std::getline(ss, token, delimiter)) {
        tokens.push_back(token);
    }
    return tokens;
}

int main() {
    std::string command = "nmcli device wifi list > wifi_list.txt";
    FILE* pipe = popen(command.c_str(), "r");
    if (!pipe) {
        std::cerr << "コマンドの実行に失敗しました。" << std::endl;
        return 1;
    }
    pclose(pipe);

    // ファイルを読み込んで構造体の配列に格納する
    std::ifstream file("wifi_list.txt");
    if (!file.is_open()) {
        std::cerr << "ファイルの読み込みに失敗しました。" << std::endl;
        return 1;
    }

    std::vector<WiFiAccessPoint> accessPoints;

    std::string line;
    std::getline(file, line); // ヘッダ行を読み飛ばす
    while (std::getline(file, line)) {
        std::vector<std::string> tokens = splitString(line, ' ');
        if (tokens.size() >= 5) {
            WiFiAccessPoint ap;
            ap.ssid = tokens[0];
            ap.mode = tokens[1];
            ap.channel = tokens[2];
            ap.signal = tokens[3];
            ap.security = tokens[4];
            accessPoints.push_back(ap);
        }
    }

    // ファイルを閉じる
    file.close();

    // 構造体の配列の情報を使用する
    for (const auto& ap : accessPoints) {
        std::cout << "SSID: " << ap.ssid << std::endl;
        std::cout << "モード: " << ap.mode << std::endl;
        std::cout << "チャンネル: " << ap.channel << std::endl;
        std::cout << "SIGNAL: " << ap.signal << std::endl;
        std::cout << "セキュリティ: