STL string::findで見つからなかった時の
書式を教えて下さい。

<-----ソース start------->
#define UNCODE
#define _UNCODE

#pragma warning( push,3 )
#pragma warning( disable : 4786 ) // 識別子が '255' 文字に切り捨
#include <iostream>
#include <string>
#include <vector>
#pragma warning( pop )
#pragma warning( disable : 4514 ) // 参照されていないインライン関数は削除
#pragma warning( disable : 4786 ) // 識別子が '255' 文字に切り捨

int wmain(int iArgC, wchar_t* ArgV[], wchar_t* EnvP[])
{
 setlocale( LC_ALL, "Japanese" );
 std::vector<std::wstring> m_sEnv;
 std::vector<std::wstring> m_sArg;
 unsigned long lLoop;
 unsigned long lPos;

 for (lLoop=0; lLoop<(unsigned long)iArgC; lLoop++) {
  m_sArg.push_back(ArgV[lLoop]);
 }
 for (lLoop=0;;lLoop++) {
  if (EnvP[lLoop] == NULL) break;
  m_sEnv.push_back(EnvP[lLoop]);
 }
 for (lLoop=0;lLoop<m_sEnv.size();lLoop++) {
  if ((lPos = m_sEnv.at(lLoop).find(L"jdk1")) != npos) { // *1
   std::wcout << m_sEnv.at(lLoop) << std::endl;
  }
 }
 return 0;
}
<-----ソース end------->

*1 で
error C2065: 'npos' : 定義されていない識別子です。
「std::npos」も試したけどだめだった。

>>以下MSDNより
>>basic_string::npos
>>static const size_type npos = -1;
>>この定数は、size_type 型として表現できる最大の値です。
>>max_size() よりも大きいことが保証されるため、
>>非常に大きな値または特殊なコードとして使用できます。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

最近の STL は良く知らないんですけど、npos は



・std::wstring::npos
・std::basic_string::npos

のどちらかだと思います。
    • good
    • 0
この回答へのお礼

std::wstring::npos で通りました

お礼日時:2001/12/06 16:02

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q変数の型でlong longとunsigned long longと言うのは何ですか?

教えていただきたいのですが、変数の型にlong longやunsigned long long
なるものがあると聞いたのですが、どのようなものでしょうか?
また、どのように宣言するのでしょうか?通常のlongなどと同じ要領で宣言し
てやれば良いのでしょうか?
もし、この型がある場合に、制約はあるのでしょうか?Unixでしか使えないとか
の制約等ありましたらぜひ教えてください。
お願いいたします。

Aベストアンサー

long longはANSI-Cの新しい改訂版C99で正式に採用されました。
C99以前のANSI-C対応処理系では独自拡張(gccなど)です。
環境の指定が無いので独自拡張は無視してANS-C99について解答します。

long longまたはlong long int=64ビット符号付き整数
unsigned long longまたはunsigned long long int=64ビット符号無し整数

定数の場合はLL(=long long)またはLLU(=unsigned long long)を付加する。
LL,LLU小文字でもよい。
1LL,0LL,100000000000lluなど

long long系の整数使うライブラリ関数について
・printf/scanf系書式の追加
%lld(=long long) および%llu(=unsigned long long)
・その他ライブラリ関数
文字列整数化:strtollが用意される。

現状では日本語で読めるC99の包括的な資料は存在しません。
英語版で良ければC99のドラフトが参考URLで読むことができます。

参考URL:http://anubis.dkuug.dk/JTC1/SC22/WG14/

long longはANSI-Cの新しい改訂版C99で正式に採用されました。
C99以前のANSI-C対応処理系では独自拡張(gccなど)です。
環境の指定が無いので独自拡張は無視してANS-C99について解答します。

long longまたはlong long int=64ビット符号付き整数
unsigned long longまたはunsigned long long int=64ビット符号無し整数

定数の場合はLL(=long long)またはLLU(=unsigned long long)を付加する。
LL,LLU小文字でもよい。
1LL,0LL,100000000000lluなど

long long系の整数使うライブラリ関数について
・...続きを読む

Qデータ型 double の桁数について

picマイコンをPICC liteと言うCコンパイラで作成しているのですが、そのPICC liteでは、データ型のdoubleは24ビットで、-3.4×10の38乗 ~ 3.4×10の38乗となっているのですが・・・この意味がさっぱりわからず何桁まで扱えるのかわかりません。
小数点以下は何桁? 整数部分は何桁?
・・・整数 小数含めて何桁まで大丈夫なのでしょうか?

Aベストアンサー

doubleは浮動小数点型で、浮動小数点型は大きな値から小さな値までを扱えるように考え出された科学技術計算用のデータ形式で有効桁を犠牲にして扱える値の範囲を宇宙の広さから原子の大きさまで幅広く扱えるようにしています。
>小数点以下は何桁? 整数部分は何桁?
と言うような精度では表せません。
http://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9
http://www.cc.kyoto-su.ac.jp/~yamada/pB/float.html
仮数部が15ビットだと精度は2進→10進変換が入るので10進で4.8桁程度です。実用レベルで有効桁は4桁ぐらいですかね。小数点の位置は関係ないです。
例えば、1.0012だとしたら1.001xで最後の2は信用できないです。10012だとしても1001xで最後の2は信用できないです。わかりますかね?
有効桁を超えた計算も出来ません。100000+1は100000です。1は有効桁外ですから。

あと、PICの場合は浮動小数点演算回路を持っていないCPUですので固定小数点のint型の数百倍かそれ以上に計算速度が遅くなります。利用はお勧めできません。

doubleは浮動小数点型で、浮動小数点型は大きな値から小さな値までを扱えるように考え出された科学技術計算用のデータ形式で有効桁を犠牲にして扱える値の範囲を宇宙の広さから原子の大きさまで幅広く扱えるようにしています。
>小数点以下は何桁? 整数部分は何桁?
と言うような精度では表せません。
http://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9
http://www.cc.kyoto-su.ac.jp/~yamada/pB/float.html
仮数部が15ビットだと精度は2進→10進変換が入るので10進で4.8...続きを読む

QC++で文字列の右端から特定の文字までの文字列を

C++で文字列の中から,文字列の右端から特定の文字までの文字列を取り出すというものを作りたいと思っています。

右端から○文字取り出す。といった感じのコードは書けるのですが、特定の文字まで、というのがどうもうまくいきません。こちら、良いアドバイスをいただける方がいましたらよろしくお願いします。

例:ファイル名を抽出
文字列\system32\notepad.exeからnotepad.exeの部分だけを取り出したい。というものです。
初めに見つけた\まで取り出す・・とやればよいのでしょうが、その方法が今ひとつ良くわからないので、どうかご助力お願いいたします。

Aベストアンサー

具体的なコードにもよりますが、

> 右端から○文字取り出す。といった感じのコードは書けるのですが

だったら、ほぼできていると思います。

char src[1000]; に文字列が入っているとして、

そのコードに、

int j = src[] にある、最後の文字を示すインデックス
for(int i = 0; i < ○; i++)
{
src[j] を取り出す;
j--;
}

という部分があるなら、

while(src[j] != '\\')

に書き直すだけ。

または、

for(int j = src[] にある、最後の文字を示すインデックス; (j >=0 ) && src[j] != '\\'; j--)

にするとか。

でも、「どうもうまくいきません」なら、「こういうことをしたら、こうなってしまいました」というのがあるほうが親切ですね。


人気Q&Aランキング