• ベストアンサー
  • 困ってます

string型からint型への型変換

  • 質問No.999055
  • 閲覧数28235
  • ありがとう数7
  • 回答数4
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);

とやる他ないのでしょうか?
初心者のつまらない質問ですが、ご教授いただけると幸です。
よろしくお願いします。

質問者が選んだベストアンサー

  • 回答No.1
  • ベストアンサー

ベストアンサー率 50% (3003/5914)

#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;
と同じように変数に代入できます。
お礼コメント
noname#9431
ご回答ありがとうございます。
質問が言葉たらずだったのですが、
質問の動機は、atoiを使うと、なんだかC++にCを継ぎ足したようで嫌だなあ、
もっと、C++らしい書き方ができないものか?ということでした。

ストリームを使うとC++らしく書けているような気がしますね!
(素人の勝手な感覚かも知れませんが。)
strstreamを使えば型変換して代入できるという点、とても参考になりました。
有難う御座いました。
投稿日時:2004/09/13 14:13

その他の回答 (全3件)

  • 回答No.4

ベストアンサー率 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なしのもののほうがいいでしょう
お礼コメント
noname#9431
ご解説ありがとう御座います。

Cは文字列処理がハッキリ言ってダメダメなので(もちろん、慣れの問題もあるのでしょうが。)C++を使い始めました。

そんなに大きなプログラムを組むわけでもないのでC++で組む必要もないのですが、
C++のその枠組みというか思想というか、言語設計っていうんでしょうか、
まあそいったものに関心し、少くとも、C++らしいコードを書きたいものだと思っております。
でも、CからC++に行くと、C++の言葉を使った単なるCのようなダサいコードになってしまうというのが悩みだったりしまして。
まあ、Cもたいして使えないのですが。。。
投稿日時:2004/09/13 14:18
  • 回答No.3

ベストアンサー率 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;
}
お礼コメント
noname#9431
ご回答ありがとうございます。#1のお礼の欄にも書かせて頂いた通り、
質問の動機は、atoiを使うと、なんだかC++にCを継ぎ足したようで嫌だなあ、
もっと、C++らしい書き方ができないものか?ということでした。
質問が言葉たらずでした。申し訳け有りません。

でも、
i=atoi(str.c_str());
は、すくなくともCとC++を正当につなげ、しかも私が質問欄にかいた
コードよりはるかにスッキリしてますね。
投稿日時:2004/09/13 14:15
  • 回答No.2

ベストアンサー率 50% (3003/5914)

補足ですが、
i=atoi(str.data());
でいいです。
お礼コメント
noname#9431
再び有難うございます。
この書き方は、#4のkeyguyさんの意見に基づくと、ちょっと心配ですね。
でも、参考になりました。
投稿日時:2004/09/13 14:14
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ページ先頭へ