はじめまして。-U-と申します。
1,5,3,
という風に、カンマで区切られた文字を読み込んで、String::Splitを用いていったん配列に格納し、
次にIntに型変換し直して別の配列に格納したいのですが、上手く行きません。
どなたか宜しければ助けていただきたいです。
tempstr: String::Splitでいったん格納させるString配列
rstr: 文字列として「1,5,3,」が入っているString
lastint: 最後に数値として格納するint配列
tempstr = rstr->Split(delimiter);
IEnumerator* Enum = tempstr->GetEnumerator();
int j = 0;
while (Enum->MoveNext()) {
String* s = __try_cast<String*>(Enum->Current);
Debug::WriteLine(s);
lastint[j] = Convert::ToInt16(s);
j++;
}
コンパイルは通りますが、実行すると
System.FormatException: 入力文字列の形式が正しくありません。
というエラーが出てしまいます。
lastint[j] = Convert::ToInt16(s);の部分で引っかかっているようですが、原因が分かりません。
マニュアルも調べてみたのですが、Stringをintにすることは出来るようでした。
なぜintに変換できないのでしょうか?
宜しくお願いします。
型変換?
Re:型変換?
とりあえず環境はきちんと明記しましょう。
>lastint: 最後に数値として格納するint配列
ならば
>Convert::ToInt16
ではなくて ToInt32 なのでは?
(int=Int32)
>Debug::WriteLine(s);
でちゃんとした数字になっていますか?
それと
>IEnumerator* Enum = tempstr->GetEnumerator();
>while (Enum->MoveNext()) {
普通にfor文使わないのは何か意味があるのでしょうか?
>lastint: 最後に数値として格納するint配列
ならば
>Convert::ToInt16
ではなくて ToInt32 なのでは?
(int=Int32)
>Debug::WriteLine(s);
でちゃんとした数字になっていますか?
それと
>IEnumerator* Enum = tempstr->GetEnumerator();
>while (Enum->MoveNext()) {
普通にfor文使わないのは何か意味があるのでしょうか?
for (int j = 0; j < tempstr->Count; ++j) { String* s = tempstr[j]; }# VS2005ならfor eachが使えて便利なんですけどね。
Re:型変換?
ちなみに
>「1,5,3,」
だと要素数が4の配列になります。
最後の要素は空文字になり、それに対するToInt16メソッドは失敗します。
VS2005で/clr:oldSyntaxで試したコード
>「1,5,3,」
だと要素数が4の配列になります。
最後の要素は空文字になり、それに対するToInt16メソッドは失敗します。
VS2005で/clr:oldSyntaxで試したコード
int main() { System::String* rstr = S"1,5,3,"; System::String* tempstr[/url]; int lastint __gc[/url]; System::Char delimiter[/url] = {L','}; tempstr = rstr->Split(delimiter); lastint = __gc new int __gc[tempstr->Count]; for (int j = 0; j < tempstr->Count; ++j) { lastint[j] = System::Convert::ToInt32(tempstr[j]); } return 0; }
Re:型変換?
申し訳ありませんでした。
環境はMicrosoft Visual Studio C++ 2003.NETのWindowsフォームです。
教えて頂いた通りやってみたのですが、やはり同じエラーが出てしまいました。
System.FormatException: 入力文字列の形式が正しくありません。
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.Int32.Parse(String s, NumberStyles style, IFormatProvider provider)
at System.Int32.Parse(String s)
at System.Convert.ToInt32(String value)
エラーの全文です。
直前のDebug::WriteLineなどを見ても、どうやら一番最初に
lastint[j] = System::Convert::ToInt32(tempstr[j]);
がある場所でエラーが起きてしまっているようです。
環境はMicrosoft Visual Studio C++ 2003.NETのWindowsフォームです。
教えて頂いた通りやってみたのですが、やはり同じエラーが出てしまいました。
System.FormatException: 入力文字列の形式が正しくありません。
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.Int32.Parse(String s, NumberStyles style, IFormatProvider provider)
at System.Int32.Parse(String s)
at System.Convert.ToInt32(String value)
エラーの全文です。
直前のDebug::WriteLineなどを見ても、どうやら一番最初に
lastint[j] = System::Convert::ToInt32(tempstr[j]);
がある場所でエラーが起きてしまっているようです。