0

私はC++プログラミングが初めてです。文字列と整数があり、それらを 1 つの char 配列にマージした後、それを分割して文字列と整数を取得したいと考えています。私はコードを作業しましたが、ほとんど機能します。唯一の問題は、文字列の最後にガベージが作成されることがあることです。このフォーラムを検索しましたが、適切な解決策が見つかりませんでした。私は何を間違っていますか?もっと簡単な解決策はありますか?前もって感謝します。これが私のコードです:

#include <iostream>
#include <fstream>
#include <string.h>
#include <stdlib.h>
using namespace std;

int main() {
    cout << "string: ";
    char my_string[64];
    cin >> my_string;
    int i = 666;
    char i_size[8];
    sprintf( i_size, "%9d", i );
    strcat( my_string, i_size );
    cout << my_string << endl;
    char temp1[9] = { 0 };
    strncpy( temp1, my_string + ( strlen( my_string ) - 9 ), 9 );
    int in = atoi( temp1 );
    cout << "int = " << in << endl;
    char temp2[strlen( my_string ) - 9];
    strncpy( temp2, my_string, strlen( my_string ) - 9 );
    cout << "string = " << temp2 << "|" << endl;
    return 0;
}

出力は次のとおりです。

[corneliu@localhost prog-build]$ ./prog
string: e
e      666
int = 666
string = e|
[corneliu@localhost prog-build]$ ./prog
string: wewewewe
wewewewe      666
int = 666
string = wewewewe�@|
[corneliu@localhost prog-build]$
4

1 に答える 1

1

固定サイズで作業しており、ケースで7文字を超えると、ゴミが生成されます。

C ++でコーディングしたいので、Cの「文字列関数」には近づかないでください。

#include <iostream>
#include <string>

using namespace std;
void main( ... )
{
   int my_int = 666;
   cout << "string: ";
   string my_string;
   cin >> my_string;

   // concat - separated by semicolon in this example
   stringstream ss;
   ss << my_string << ";" << my_int;

   cout << "string and int in one string: "
         << ss.str().c_str() << endl;

   // split
   string tmpStr = ss.str();
   size_t found = tmpStr.find(";");
   while( found != string::npos  )
   {
      cout << tmpStr.substr(0, found).c_str() << endl;
      tmpStr = tmpStr.substr( found+1 );
      found = tmpStr.find(";");

      // this case is true for the last part
      if( found == string::npos )
         cout << tmpStr.c_str() << "\n";
   }

   return 0;
}

何をしたいかによっては、各文字列部分を整数に変換する必要がある場合があります。失敗した場合は、文字列であることがわかります。そうでない場合は、整数に割り当てることができます。

このアプローチでさえ、生産的なコードで実際に行うことではないと思います。そこからやりたいことを行う方法のヒントが得られるはずです。

于 2013-09-18T13:53:28.660 に答える