X



【初心者歓迎】C/C++室 Ver.103【環境依存OK】
レス数が1000を超えています。これ以上書き込みはできません。
0948はちみつ餃子 ◆8X2XSCHEME
垢版 |
2018/12/01(土) 22:59:29.94ID:OSJOUMnn
>>947
Windows だけでいいなら、
言語処理系を組込んでしまうよりはインターフェイスを COM にしておいて
適当な (OLE オートメーションに対応した) 言語を使ってもらう方が簡単かも。
0949デフォルトの名無しさん
垢版 |
2018/12/01(土) 23:02:01.99ID:o8nGgYR0
>>945
コンパイル通りましたありがとうございます!
>>946
レスありがとうございます。ラムダはC#のをちょっとかじったくらいなのでよくわからないです。
0951はちみつ餃子 ◆8X2XSCHEME
垢版 |
2018/12/02(日) 01:23:40.96ID:AEdnuZu9
Windows なら WSH がすごく良い仕組みなので、
その枠組みをぜひ活用して欲しいと思ってる。
0953デフォルトの名無しさん
垢版 |
2018/12/02(日) 16:20:56.00ID:qwr+Mk5T
今は日本語や漢字にとどまらず、Unicodeで許されるあらゆる言語の文字を使ってるから、表現性はとても豊か(何がだ)
0954デフォルトの名無しさん
垢版 |
2018/12/02(日) 16:34:18.61ID:FIqRJPSc
[](){}と括弧揃い踏みなところがラムダ式の素晴らしいところ
キャプチャの必要性が分かるまで15時間も掛かった
0955デフォルトの名無しさん
垢版 |
2018/12/02(日) 19:18:33.98ID:dV4bdQkD
>>950>>951
今思えば全く勉強不足だった...
階層的データ構造(CADとか)はS式と思い込んでいたのよ
0956デフォルトの名無しさん
垢版 |
2018/12/03(月) 00:53:09.20ID:G9VPwKeW
#include <iostream>
#include <string>

using namespace std;

int main(void)
{
string x;
cin >> x;

for (int i = 0; i != x.size() - 1; ++i)
{
cout << stoi(x[i]) << endl;
}
}
0957デフォルトの名無しさん
垢版 |
2018/12/03(月) 00:54:55.68ID:G9VPwKeW
⬆が動かないのですがどこが間違っているのかご教示下さい

C11は対応しています
0960デフォルトの名無しさん
垢版 |
2018/12/03(月) 06:05:42.99ID:szUqPRvW
>>956 が動かないってのはコンパイルエラーということだよね。

string x; だから x[i] の型は char で、
一方 stoi() が要求する引数は string であるからして...
0961デフォルトの名無しさん
垢版 |
2018/12/03(月) 15:49:30.56ID:bFjQrMvM
こういうことをしたいのではないか?

ここを    cout << stoi(x[i]) << endl;
こうする   cout << (isdigit(x[i])? x[i] - '0': 0) << endl;
0962デフォルトの名無しさん
垢版 |
2018/12/05(水) 04:14:09.40ID:yf36y6mU
クラスの中の宣言部分で
var a = new classA(32);
がある時にこの生成時間を測るには
p1out = 1;
var a = new classA(32);
p1out = 0;
ってやってP1.1をオシロで確認したらいいのだろうか?
0965デフォルトの名無しさん
垢版 |
2018/12/05(水) 11:50:29.68ID:UMfTWITZ
スタック領域に確保した変数のメモリはその変数のスコープ終了時に開放される
静的領域はスコープが終了しても開放されない
0966デフォルトの名無しさん
垢版 |
2018/12/05(水) 14:18:35.25ID:2sSegHBZ
だがちょっとまってほしい
本当にそれだけだろうか?
0968デフォルトの名無しさん
垢版 |
2018/12/05(水) 16:03:55.84ID:ccXzaFBs
静的領域は、アプリの実行前に確保する。
サイズも変動しない

スタック領域は、アプリの実行中に確保・解放する。
サイズも変動するし、領域を使い果たすと、stack overflow というエラーが起きる

事前にサイズがわからず、サイズが変動して、エラーが起きる可能性もあるので、
組み込み制御装置では、制限される事もある
0970デフォルトの名無しさん
垢版 |
2018/12/05(水) 17:12:15.31ID:ifntcr/4
組込だとスタック4つまでとかあるね。
下手に関数の中で関数呼び出し出来ない。

今はだいぶ緩和されてるけど、数が増えただけでPCほど緩くはない。
0971デフォルトの名無しさん
垢版 |
2018/12/05(水) 21:08:04.50ID:vV3Kttot
int num;
unordered_set<int> ust;
auto itr = ust.find(num);
itr == ust.end() ? ust.insert(num) : ust.erase(num);
とすると、
error: operands to ?: have different types
というエラーがでます
三項間演算子を使わずにif文を使って書くと普通に上手く行くのですが、なぜエラーがでるのでしょうか
0972デフォルトの名無しさん
垢版 |
2018/12/05(水) 21:30:51.95ID:8vnwU0Eo
この前パソコンで100回くらいの再帰を書いたけど大丈夫だった
それともgccがよしなにやってんの?
0974デフォルトの名無しさん
垢版 |
2018/12/06(木) 06:42:35.96ID:6JYs1FEy
三項演算子が絡んだ式の (条件 ? 値A : 値B) 部分で
値Aと値Bの型が異なると、三項式(と言う呼び方で良いものか)全体としての
結果の型が確定しないからダメって感じかねぇ。

どうせ値を使っていない式文だからいいじゃん、は通らないと。
0975デフォルトの名無しさん
垢版 |
2018/12/06(木) 08:07:06.33ID:puhZa8TL
>>974
そうだね。
値A、値Bともに(void)でキャストすればコンパイルできた気がする。
そんなことするくらいなら素直にif/elseにすべきだけど。
0978デフォルトの名無しさん
垢版 |
2018/12/06(木) 09:05:40.26ID:THHCczvq
スタック領域は同じコンパイラでもオプションで変えられる事も多い(組み込みには言及しない)
末尾再帰だとループに展開されたりもするから(外から見た挙動が同じならC/C++はコンパイル後の表現を縛らない)、再帰イコールしぬとは限らない
0981デフォルトの名無しさん
垢版 |
2018/12/07(金) 14:38:45.55ID:lkrG/qbb
型の違いでっていうのも判るが
結局評価だけして代入しないなら
(副作用を期待しないって条件付きだが)
最適化で消される行かも知れんな
0982デフォルトの名無しさん
垢版 |
2018/12/13(木) 22:22:08.57ID:JDKMBsk/
https://ideone.com/pUrvlb
VisualStudioCommunity2017 ver15.9.4でこのコードをビルドすると
「error C2440: '<function-style-cast>': 'int' から 'Lit' に変換できません。」
というエラーが10行目で出るんだけど、何が悪いんだろうか。
0983デフォルトの名無しさん
垢版 |
2018/12/14(金) 01:28:14.98ID:l0obV/M9
Parser() { reg(Lit{ 1 }); } → Parser() { ::reg(Lit{ 1 }); }
コレでいける
理由は知らん
0985デフォルトの名無しさん
垢版 |
2018/12/27(木) 10:14:18.41ID:aMHl4+JJ
ubuntuで日本語含むファイル名を操作したいのでwoendirとかないのか探したんだけど見つからず、
wchar_tでファイル名処理した場合、いちいちmbstiwcsで変換するしかないの?
0986デフォルトの名無しさん
垢版 |
2018/12/27(木) 10:19:33.81ID:0qVX2+Xi
変換出来ない文字はどうすんの?
0989デフォルトの名無しさん
垢版 |
2018/12/27(木) 12:49:46.03ID:aMHl4+JJ
utf8のままどーやってopendirするのさ?
それができないから困ってるのに

DIR *dir = opendir("hogehoge");
struct dirent *dp;
dp=readdir(dir);
としたとき,dp->d_nameに入ってるファイル名ってのはcharだよね
このファイル名に手を加えようとする(renameとか)と、utf8の場合、いったんmbstowcsでwchar_tにでもコピーするとか、
wstringにでもコピーしないと文字コードと格闘する羽目になるよね。
もし、
wDIR *wdir = woprndir(L"hogehoge");
struct wdirent *wdp;
wdp = wreaaddir(wdir);
とかできればsonomama
wdp->d_nameはwcha_tなので文字の先頭バイト見て何文字なのか判断するなんて余計な操作しなくて済むと思ったわけ。
0990デフォルトの名無しさん
垢版 |
2018/12/27(木) 13:00:04.82ID:aMHl4+JJ
bashで
for i in *; do
$newname=`echo $i| myprogram`
mv $i $newname
done

で済ませてたんだけど、myprogramの方は単に文字処理だけで、
置換とか文字列削除とかややこしいところはwstringに変換してた。
bashに任せてたディレクトリオープンや、ファイル操作までC/C++でやらせようとなると、
再度wcstombsとか余計なコピーが必要になってなんだか思いっきり損してる気分になったので、
なんかほかの手がないものかと?
0991デフォルトの名無しさん
垢版 |
2018/12/27(木) 13:49:46.07ID:SzdNjvIa
>>989
utf8 を wchar_t* に入れるのはただのアホやろ
0994デフォルトの名無しさん
垢版 |
2018/12/27(木) 17:54:58.01ID:o7TBUkJP
無責任なこと書くけど、
Linuxならmountコマンドにオプション加えれば
ファイル名の文字コードをうまいこと透過的に変換してくれんか?

ファイルの実体に手を触れずにファイル名のコード系だけ変えたいなら、
struct dirent の d_name のバイト列をどう解釈するかの問題で、
ロケール関係ない話になりそうだし。
0997デフォルトの名無しさん
垢版 |
2018/12/28(金) 01:33:23.72ID:qtS4fp6w
>>991
それは違うだろ
ファイル名をcharに入れてregex_replaceあたりの正規表現で再びcharに入れる場合はともかく
全角半角変換みたいに文字コードそのものをいじりたい場合はwchar_tに入れるだろ
全角文字コード -= '!'-'!'
みたいな変換しようすれば
char *pBuf = Bufとして、
*pBufの値に応じて
((*pBuf<<16) +(pBuf[1]<<8)+(pBuf[2] )&(0x00ffff
みたいなバイトの組み立てが必要になるじゃん
*pBufの文字コードに応じて
pBuf +=3だのpBuf++だのインクリメント幅の調整も要るし
いったんwcha_tに入れるのは何も間違ってないと思うが
0998デフォルトの名無しさん
垢版 |
2018/12/28(金) 02:13:55.81ID:qtS4fp6w
シェルからファイル名をfgetwsで受け取ってるうちはwchar_tとwstringで処理してから
またシェルに出力を返せばすむけど
opendirにwchar_t版がないんで、正規表現以外の処理して、
シェルに任してた部分をC++で全部書こうとすると、
>>993のいうようにmbstowcsとwcstombsで処理を挟んでやらんとどーしよーもないと思う
0999デフォルトの名無しさん
垢版 |
2018/12/28(金) 05:55:59.60ID:ufThBpcD
c++builder10.3 community
IID_PPV_ARGSを使わない場合どうしたら良いか教えてください
何を入れたら良いのかわからないです
#include <windows.h>
#include <tchar.h>
#include <shlobj.h>
#include <shellapi.h>
#include <commoncontrols.h>
void __fastcall TForm1::Button1Click(TObject *Sender) {
IImageList *piml;

SHGetImageList(SHIL_JUMBO, IID_IImageList, (void**)&piml);// pimlがNULLになる

SHGetImageList(SHIL_JUMBO, IID_PPV_ARGS(&piml));// 成功
}
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 180日 2時間 20分 26秒
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況