- ベストアンサー
string型からint型への型変換
C++で、string型からint型は、 string str; //ほかのstring型の変数から整数部分のみを切り出して来たものが入る int i; //ここにstrの中身(整数)をあらたに入れたい が定義されている下で、 char s[10]="0"; などを通して、 int length=str.length(); str.copy(s,length,0); i=atoi(s); とやる他ないのでしょうか? 初心者のつまらない質問ですが、ご教授いただけると幸です。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#include <string.h> #include <strstream.h> int main(void){ string str("1234"); istrstream istr(str.data()); int i; istr >>i; cout << i << '\n'; return(0); } strstreamを使うことで、 cin >> i; と同じように変数に代入できます。
その他の回答 (3)
- keyguy
- ベストアンサー率28% (135/469)
str.c_str(): // basic_stringの'\0'で終わる文字列本体へのポインタを返します。 const charT* c_str() const; str.data(): // 文字列データ本体をそのまま返す。 // '\0'が文字列の終わりにあるという保証はたぶんありません。 const charT* data() const; str.data()は char* と同じように扱えないかもしれないので char* とまったく同じ str.c_str() を使うほうがC言語になれている人にはいいでしょう また<~.h>は旧式のものなので.hなしのもののほうがいいでしょう
お礼
ご解説ありがとう御座います。 Cは文字列処理がハッキリ言ってダメダメなので(もちろん、慣れの問題もあるのでしょうが。)C++を使い始めました。 そんなに大きなプログラムを組むわけでもないのでC++で組む必要もないのですが、 C++のその枠組みというか思想というか、言語設計っていうんでしょうか、 まあそいったものに関心し、少くとも、C++らしいコードを書きたいものだと思っております。 でも、CからC++に行くと、C++の言葉を使った単なるCのようなダサいコードになってしまうというのが悩みだったりしまして。 まあ、Cもたいして使えないのですが。。。
- keyguy
- ベストアンサー率28% (135/469)
難解な質問を読んでないので勘違いしているかも #include<iostream> #include<string> using namespace std; void main(void) { string str; int i; str="9"; i=atoi(str.c_str()); cout<<i<<endl; }
お礼
ご回答ありがとうございます。#1のお礼の欄にも書かせて頂いた通り、 質問の動機は、atoiを使うと、なんだかC++にCを継ぎ足したようで嫌だなあ、 もっと、C++らしい書き方ができないものか?ということでした。 質問が言葉たらずでした。申し訳け有りません。 でも、 i=atoi(str.c_str()); は、すくなくともCとC++を正当につなげ、しかも私が質問欄にかいた コードよりはるかにスッキリしてますね。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
補足ですが、 i=atoi(str.data()); でいいです。
お礼
再び有難うございます。 この書き方は、#4のkeyguyさんの意見に基づくと、ちょっと心配ですね。 でも、参考になりました。
お礼
ご回答ありがとうございます。 質問が言葉たらずだったのですが、 質問の動機は、atoiを使うと、なんだかC++にCを継ぎ足したようで嫌だなあ、 もっと、C++らしい書き方ができないものか?ということでした。 ストリームを使うとC++らしく書けているような気がしますね! (素人の勝手な感覚かも知れませんが。) strstreamを使えば型変換して代入できるという点、とても参考になりました。 有難う御座いました。