• 締切済み

文字列と配列について

文字列に数字を入力して、それを配列に入れて扱いたいのですが、誰かわかる人いたら教えてもらえませんか? また、参考となるソースなどを載せてもらえたらうれしいです。

みんなの回答

  • WizTaka
  • ベストアンサー率53% (7/13)
回答No.4

koko_u_ さんがおっしゃっている string というのは,STL (Standard Template Library) というヤツです. 以下のサイトでも解説されています. http://www.wakhok.ac.jp/~sumi/stl/header/string.html この string という型を利用すると,文字列を簡単に扱うことができます. 以下のように書いてみて下さい. //-------------------------------------------------------- #include <iostream> #include <string> using namespace std; int main() { string strTest = "0123456789"; cout << strTest << "\n"; return 0; } //-------------------------------------------------------- コンソールに 0123456789 と表示されたハズです. "0123456789" という文字列をひとつのオブジェクトとして扱ったことがお分かりかと思います. この string 型というのはとっても便利で,配列のように扱うことも可能にしてくれています. cout の行を以下のように書き換えてみて下さい. cout << strTest[3] << "\n"; すると,コンソールに 3 と表示されたハズです. 配列のように扱うことができたことを確認できたと思います. string 型のままで配列のように扱うことができるので別の配列に入れる必要はありませんが,もしやりたいのならば,以上をヒントに new 演算子等を使ってやってみて下さい.

全文を見る
すると、全ての回答が全文表示されます。
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★前回の続き(関連)の質問ですか? >文字列に数字を入力して、それを配列に入れて扱いたいのですが、誰かわかる人いたら教えてもらえませんか?  ↑  前回の続きかい? ・入れたい配列の型や桁数でいろいろと変わってきます。  もしも前回の続きであれば一旦文字列領域に数字文字列を読み込ませて  その文字列領域から配列の1つに10進数4桁ずつセットしていく関数を  作ります。前回関数を作りたくないと書かれていましたが作りましょう。 ・それから小数を扱うのか、整数のみかで変わってきます。  さらに符号付き、符号なしでも変わります。 >また、参考となるソースなどを載せてもらえたらうれしいです。  ↑  一応、載せておきますが理解できますか? サンプル:符号付きの整数のみのバージョン #define MAX_NUM1 (25) // 加減算用(100桁) #define MAX_NUM2 (50) // 乗除算用(200桁) #define MAX_LOG10 (4) // 1要素4桁 class abc {  int m_sin;  int m_len;  int m_num[ 50 + 1 ]; // 1要素4桁×50個=200桁(乗算用に2倍にしておく) public:  abc& set( const char string ); // 代入 }; // 代入 abc& set( const char string ) {  int pos, len;    // 符号処理  for ( m_sin = +1 ; ; string++ ){   if ( *string == '+' ){    m_sin *= +1;   }   else if ( *string == '-' ){    m_sin *= -1;   }   else break;  }  // 開始位置  len = (int)strlen( string );  pos = (len / MAX_LOG10);  len = (len % MAX_LOG10);  m_len = pos;  // 読み込み  do {   int value = 0;      while ( --len >= 0 ){    value = (value * 10) + (*string++ - '0');   }   m_num[ pos ] = value;   len = (MAX_LOG10 - 1);  } while ( --pos >= 0 );  // 長さの補正  while ( --m_len >= 0 ){   if ( m_num[m_len] != 0 ){    m_len++;    return *this;   }  }  m_len = 0;  m_sin = 0;  return *this; } 以上。

参考URL:
http://oshiete1.goo.ne.jp/qa3659827.html
SYSYSYSY
質問者

補足

かなり難しいです・・・。

全文を見る
すると、全ての回答が全文表示されます。
  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

>もう少し簡単な形で教えていただけませんか? 無理言うなよ。。。 むしろ外していると思って回答を付けたので、SYSYSYSY さんが本当にしたいことを補足にどうぞ。

全文を見る
すると、全ての回答が全文表示されます。
  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>文字列に数字を入力して std::string num; std::cin >> num; >それを配列に入れて扱いたいのですが char buf[128]; std::copy(num.begin(), num.end(), buf); ということ?

SYSYSYSY
質問者

補足

>std::string num; >std::copy(num.begin(), num.end(), buf); すいません、C++を習いたてでこの二箇所がよくわからないので、もう少し簡単な形で教えていただけませんか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 文字列の配列

    文字列の配列 1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4 のようにIPアドレスが一行に一つづつ書き込まれたテキストがあります。 ここから、それぞれのIPアドレスを文字列として配列に書き込みたいのですが、どうしたらよいのでしょうか。 IPアドレスの数だけ配列を始めに宣言して、それぞれに書き込んでいくのでは手間がかかりすぎてしまいます。 単純に数値の羅列なら scanfを使い、配列に格納できるのですが、文字列になるとどうしたらいいのかわかりません。 よろしくお願いいたします。

  • EXCELで、連続した文字列の配列

    EXCEL初心者がちょっとしたデータをEXCELで 扱おうとして、さっそく問題にぶちあたりました。 連続した文字列の配列に関してなんですが、 “1年後”、“2年後”、“3年後”。。。。 という感じで“~年後”を100年後くらいまで作りたいので オートフィル?利用としています。 参考にしてるページ(http://www.eurus.dti.ne.jp/~yoneyama/Excel/nyuryoku.htm) の下の方に 「文字列に数字が含まれるものも連続した値が入力できます。(登録の必要はない)」とあるので “1年後”と入力した後にそのセルの右下黒十字をドラッグすれば できるのかなと思いきやできませんでした。 どうやって連続した文字列を作ればいいでしょうか? 質問がわかりにくかったら申し訳ありません、 わかりにくい点を言ってただけたら補足したいと思います。 どうかよろしくお願いします。

  • 文字列を配列として扱う方法について

    文字列を配列に格納したいのですが、うまくいかずに困っています。 例えば、 a[1]=1番目のファイル.csv; a[2]=2番目のふく; a[3]=凄く長い名前.csv; としたいと考えています。 どのようにすればいいのでしょうか? 数字を配列に格納することはできます。

  • 文字列を配列化する方法を教えてください!

    1列の文字列を配列化する方法を教えてください。 メモリの確保らしいのですが、参考になるソースが拝見できれば嬉しく・・・main から参照したいです。 char Text[] = "AAAA\nBBBB\nCCCCCCCC\nDDD\n";  ↓ char str[0] = "AAAA";    str[1] = "BBBB";    str[2] = "CCCCCCCCC";    str[3] = "DDD"; どうやったらいいのか全くイメージがわかないので、 よろしく御願いします!

  • 文字列についていい方法はありますか?

    マイコンでプログラムを作っています。 配列aに文字を入力し、それを7セグに表示したいです。 表示自体は出来ています。 なので、文字列を配列に入力する方法を教えてください。 (数字以外を表示します。) まず、現在は char *a[6]; a[0]="12345"; seg(*a);//7セグ表示用関数 このようなソースを書きました。これは希望通りの動作してます。 しかし、例えば a[0] = "12"; a[2] = "345"; や、 a[0] = "12" + "345" のように、文字列どうしをくっつけるような使い方が出来ないものかと悩んでいます。 最悪の場合 char a[5]; a[0] = '1'; a[1] = '2'; a[2] = '3'; a[3] = '4'; a[4] = '5'; と、このような方法を使おうと思ってますが、あまり好きじゃないです。 出来ないのは無知なせいなのか、方法は有るが最後の方法が一番マシなのか、もっといい方法があるなら何を使えばいいのか、等アドバイスをお願いします。 よろしくお願いします。

  • 文字列について

    昨日以下の質問をしました初心者ですが、 今自分で関数を作成しているのですが、文字列(丸数字)の文字化けにかなり苦しんでいます。 (※注※)これ以降(1)など()の中に数字を入れて記述しているものは実際のソースコード上では丸数字で記入してます。教えてgooでは丸数字が記述できないようでして… 関数の内容としては、(1)あ(2)い(3)う……このように丸数字で区切られている文字列を配列名を$dataとすると、$data[0]には「あ」、$data[1]には「い」、$data[2]には「う」が入るような関数を作成しています。 この丸数字の数は(10)まで対応させようと考えてます。 という質問をしましたが、この問題に関しては、 function bunkai($str1){ $data=explode('__SEPRATOR__',str_replace(Array("(1)","(2)","(3)","(4)","(5)","(6)","(7)","(8)","(9)","(10)"),'__SEPRATOR__',$str1)); array_shift($data); return $data; } と記述することのより解決しました。 しかし、昨日の質問を少し僕が間違えていたようで、実際には、$data[0]には「(1)あ」、$data[1]には「(2)い」、$data[2]には「(3)う」が入るような関数を作成したかったのです。で、試行錯誤しようにも方法が思いうかびませんでした。何か良い方法はないでしょうか?? ちなみに文字列は(1)あ(2)い(3)う……のように(1)から順番に始まるものもあれば(3)え(4)う…と(1)ではなく途中から始まるものもあります、なので、配列の順番を取ってきてそのまま丸数字に置き換えて挿入するという方法はダメです。 誰か文字列操作に詳しいお方、教えてもらえたらうれしいです。

    • ベストアンサー
    • PHP
  • 文字列を配列に…。

    VBはまだ始めたばかりで本当に初歩的なことかもしれませんが分かる方がおられたら是非教えて下さい。 text1.textから取り込んだ文字列を”一文字ずつ”(Dim a(100) as stringで宣言した)配列に格納したいのですがどうしたらいいのでしょうか?? <例>text1.textに"abc"と入力しcommandbuttonを押すとa(0)に"a"がa(1)に"b"がa(2)に"c"が格納されるといったかんじです。 ちなみに今私がしたいのはtext1.textに、ある文字列を入れその文字列を文字コードに変換しそれを一文字分ずつ+1してまたそのコードを文字に直しtext2.textに出力するというものです(ようは簡単な暗号化ですね)。 私はAscとChrコマンドを利用して1文字ずつコードをずらしていこうと思っているのですが、他に良い方法などあるのでしょうか?? 本当に初心者でどのようにしらたよいのか分かりません…。 どなたか分かりやすく教えていただけませんでしょうか?? お願いします。

  • 配列同士の文字列の比較

    一次元配列と二次元配列での文字列の比較って、出来ないんでしょうか?

  • 文字列を表すための配列とポインタ

    文字列を表すための配列とポインタ  配列とポインタは同様に扱えるもの、と思って、次のプログラムを作りました。処理系は、Visual Studio 2010 コマンドプロンプトです。 #include <stdio.h> void main(void) { char a[256]; char *b; printf("文字列を入力してください。\n"); printf("例「abcde」\n\n"); printf("配列型文字列を使います。\n"); scanf("%s", a); printf("文字列は%sです。\n\n", a); printf("ポインタ型文字列を使います。\n"); scanf("%s", b); printf("文字列は%sです。\n", b); }  すると、まずコンパイル時に、 「warning C4700: 初期化されていないローカル変数'b'が使用されます」 と表示されました。そして、実行すると、「配列型文字列」の方は問題ないのですが、「ポインタ型文字列」の方の実行後に、 「x.exeは動作を停止しました。 問題が発生したため、プログラムが正しく動作しなくなりま した。プログラムは閉じられ、解決策がある場合は Windowsから通知されます。」 と表示され、エラーとして終了してしまいます。 「char *b;」 と宣言するところが問題のようですが、なぜなのかが分かりません。どなたか、解説をお願いします。

  • 文字列のプログラムについて

    キーボードから入力された1行の文字列を逆順(abc -> cba)にして、 更に大文字なら小文字にし、小文字なら大文字にして表示するプログラムを作る問題です。 とりあえず getcharを使い、キーボードから文字列を入力しその文字列を 配列変数に保存し、その配列変数について変換させるのだと思いますが、 どうしてもgetcharでキーボードからえた文字列を配列変数にいれる方法がわかりません。 教えてください。