2

char配列の数値文字列値を抽出したい。実際、ファイル管理のためにファイル名に埋め込まれている番号を抽出したいと思います。たとえば、file21というファイル名がある場合、このファイル名の10進数21が必要です。

これらの値を抽出するにはどうすればよいですか?

次のことを試しましたが、予期しない値になります。これは、アーティメティック操作を実行しているときに、charからintに暗黙的に型キャストされた結果だと思います。

char * fname;
cout<<"enter file name";
cin>>fname;

int filenum=fname[4]%10+fname[5];
cout<<"file number is"<<filenum;

注:ファイル名は厳密にfileXXの形式であり、XXは01から99までの数字です。

4

5 に答える 5

2

char*読み込んだメモリを割り当てていないため、未定義の動作が発生します。

char * fname = new char[16];  //should be enough for your filename format

またはそれ以上

char fname[16];

また、あなたは何を期待しますか:

fname[4]%10+fname[5];

する?数字を魔法のように連結しますか?

まず、最初の文字をに変換intし、それを乗算し10、2番目の文字をに変換して最初の文字にint追加します。簡単なグーグル検索でchar to intそこにたどり着きます。

于 2012-05-07T16:21:47.570 に答える
2

'0'数字の10進値を取得するには、減算する必要があります。

int filenum=(fname[4]-'0')*10+(fname[5]-'0');

さらに良いことに、次を使用する必要がありますatoi

int filenum = atoi(fname+4);
于 2012-05-07T16:23:32.063 に答える
1

これらの値を抽出するにはどうすればよいですか?

方法は無数にあります。1つの方法は使用することstd::istringstreamです:

#include <string>
#include <sstream>
#include <iostream>

int main () {
  std::string fname;
  std::cout << "Enter file name: ";
  std::getline(std::cin, fname);

  int filenum;
  std::istringstream stream(fname.substr(4,2));

  if(stream >> filenum)
    std::cout << "file number is " << filenum << "\n";
  else
    std::cout << "Merde\n";
}
于 2012-05-07T16:33:27.417 に答える
0

最も単純なコードは次のとおりです。

#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
  int filenum;
  string fname;
  cout<<"enter file name";
  cin>>fname;

  string str2 = fname.substr(4,2);
  istringstream(str2) >> filenum;
  cout<<"file number is"<<filenum;
  return 0;
}
于 2012-05-07T16:39:42.463 に答える
0

入力がそれほど明確に定義されている場合、最も簡単な解決策はscanfです。

int main()
{
    int theNumber = 0;
    scanf("file%d.txt", &theNumber);
    printf("your number is %d", theNumber);
}

stdioの代わりにchar*から読み取って、実際にチェックしてください:http: //codepad.org/JFqS70yI

scanf(およびsscanf)も、適切な入力形式のチェックをスローします。正常に読み取られたフィールドの数を返します。この場合、戻り値が1以外の場合、入力は間違っていました。

于 2012-05-07T16:48:25.930 に答える