#include <fstream>
#include <iostream>
#include <string>
std::ifstream inputfile;
string file = "test.txt";
string buffer;
inputfile.open(file, std::ios::in);
std::getline(inputfile, buffer);
--------------------------------------------------
// 複数行の場合
while(std::getline(inputfile, buffer)){
std::cout << buffer << std::endl;
}
カテゴリー: プログラミング
[VSCode] Git Graphの日付表示を英語表記から変更する
ソースコードの履歴はVSCodeのGit拡張機能 Git Graphで管理しています。
Git Graphの難点はデフォルトの日付が英語表記になっているところです。これを標準的な表記にするには、拡張機能設定のDate:FormatをISOにします。
[C++] 作業ディレクトリの確認・変更
#define DATA_DIR "/dir" // 変更後の作業ディレクトリ
#define PATH_SIZE 512
#include <iostream>
#include <unistd.h>
using std::cout; using std::endl;
// 変更前の作業ディレクトリ確認
char tmp[256];
getcwd(tmp, 256);
cout << "Current working directory: " << tmp << endl;
// 作業ディレクトリ変更
chdir(DATA_DIR);
// 変更後の作業ディレクトリ確認
getcwd(tmp, 256);
cout << "Current working directory: " << tmp << endl;
[C++] const char* とconst wchar_t*の相互変換
Python/C APIでよく使うため関数をリサーチしました。2011年のStackOverflow英語版等にいい関数がありましたので拝借します。なおサロゲートペアには対応していません。
サロゲートペア:1つの文字に対して2つの文字コードを使って表される文字。𠀋 𡈽 𡌛 𡑮 𡢽 𠮟 𡚴 𡸴 𣇄 𣗄など。
const wchar_t* GetWC(const char* c) {
const size_t cSize = strlen(c)+1;
wchar_t* wc = new wchar_t[cSize];
mbstowcs (wc, c, cSize);
return wc;
delete [] wc;
}
--------------------------------------------------
// stringへの変換(charは"string.c_str()")
std::string GetStr(const wchar_t* c) {
std::string tmps;
if (c == nullptr)
return tmps;
size_t sz = wcslen(c);
tmps.reserve(sz*2);
const size_t CNT_MAX = 50;
char tmpc[CNT_MAX];
wchar_t tmpw[CNT_MAX];
const wchar_t* p = c;
while (*p) {
wcsncpy(tmpw, p, 1);
tmpw[1] = L'\0';
p += 1;
wcstombs(tmpc, tmpw, CNT_MAX);
tmps += tmpc;
}
return tmps;
}
setlocale(LC_ALL, ""); // GetC関数使用の際に必要
マルチバイト文字対策とは言えワイド文字wchar_tの存在は何ともやっかいです。
[macOS] Pythonの開発環境構築 非pyenv
[Mac mini M1, macOS Big Sur 11.6.5]
Big SurにてPythonの開発環境を一から再構築してみました。pyenvは使わず、公式サイトからダウンロードしたPython3.10.4固定です。
ディレクトリ読み込みの優先順位は.bash_profileで設定しています。最初はpipがどこにも見当たらず少し焦りました。結局pip3をファイル名変更したシンボリックリンクとして使っています。
export PATH="/Library/Frameworks/Python.framework/Versions/3.10/bin"
export PATH=$PATH:"/usr/local/bin"
export PATH=$PATH:"/usr/bin"
export PATH=$PATH:"/bin"
# python
# /usr/local/binに3.10.4のシンボリックリンクを作成
ln -s /Library/Frameworks/Python.framework/Versions/3.10/bin/python3 /usr/local/bin/python
# pip
# /usr/local/binにpip3のシンボリックリンクを作成
ln -s /Library/Frameworks/Python.framework/Versions/3.10/bin/pip3 /usr/local/bin/pip
ファイル名を変えない場合は.bash_profileに以下の記述を追加します。
alias python="python3"
alias pip="pip3"
SIP(System Integrity Protection)を解除しても/usr/binのファイルを入れ替えることができないので、/usr/local/binに配置しました。
設定前後のpythonおよびpipファイルは以下のようになります。実効ファイルの配置ディレクトリ(色付きセル)はwhichコマンドで確認しました。
[XCode] シミュレータが大きすぎて画面からはみ出る
[Mac mini M1, MacOS Monterey 12.3.1, XCode 13.3.1]
右上のRotateボタンを4回押して一回転させたら上部バーとスマホ画面の間が狭くなり画面に収まりました。XCodeの不具合はなかなかのものです。
[C++] 25 string, char*, int間の変換
メインブログのTIPS記事はこちらに移動させます。
<string型からchar*型>
using std::string;
string str;
char* str_to_char = str.c_str();
<string型からchar[]型>
string str;
char ch[2048] = {};
str.copy(ch, 2047); // 最後にヌル文字が残るようにする
<int型からstring型>
using std::string; using std::to_string;
int num ;
string int_to_string = to_string(num);
<string型からint型>
using std::string; using std::stoi;
string str;
int str_to_int = stoi(str);
<char*型からint型> atoi関数はエラー時に0を返すので取り扱い注意!!
#include <stdlib.h>
char* ch;
int char_to_int = atoi(ch);
<int型からchar*型>
int型からstring型、string型からchar*型へ順に変換
using std::string; using std::to_string;
int num ;
string int_to_string = to_string(num);
char* str_to_char = (to_string(num)).c_str();
<const char*からstring型>
using std::string;
const char* cstr;
string cstr_to_string = string(cstr);
<char型単体からstring型>
char ch = 'a';
string str{ch}; strがstring型変数
<char[]型からstring型>
char chars[] = {'a', 'b', 'c'};
std::string str(chars, 3); // 3はcharの個数、strがstring型変数
[C++] size_t型
未だになじまないのでメモ。
長さ、大きさ、サイズを表現する型。sizeof演算子、strlen関数など、byte数や長さの表現に使用する。
unsigned longと同義。
[C++] コンパイルエラー std::vector
std::vectorはC03++以前の古いコンパイラでは対応していないため、コンパイル時にオプションとして-std=c++11などを追加します。
error: non-aggregate type 'std::vector<string>' \
(aka 'vector<basic_string<char, char_traits<char>, allocator<char> > >') \
cannot be initialized with an initializer list
std::vector<string> dakuon = {"が","ぎ"};
[VSCode] プロジェクト作成時のGit設定 非Xcode環境での開発
1.プロジェクトディレクトリを作成する。
2.カレントディレクトリをプロジェクトディレクトリに移動させる。
3. git initコマンドを実行し、ローカルリポジトリを初期化する。
4.VSCodeでプロジェクトディレクトリを開き、コーディングを開始。
5.適当なところで左のソース管理ボタンを押し、コミットする。
推奨拡張機能
Git Graph : バージョン管理状況を図で表示する。