0

C++初心者です。簡単なプログラムを書く。名と姓を抽出してこれらを個別に印刷しようとする場合を除いて、すべてが機能します。姓に印刷される文字の数は、常に名の数字と同じサイズになります。そのため、名前が will jackson の場合、プログラムは firstname を will と、second name を jack と出力します。これを解決するにはどうすればよいですか?

ここにコードがあります

for( i = 0; i < 19; i++)
  if(cAddress[i] == ' ' || cAddress[i] == '_' || cAddress[i] == '-' || cAddress[i] == '.')
    break;

strncpy(cFirst, cAddress, i);

cFirst[i] = '\0';
cout << endl << "\n";
cout << "Your first name is " << cFirst << endl;

strcpy(cSur,cAddress + i + 1);
cSur[i] = '\0';
cout << endl;
cout << "Your surname is " << cSur << endl;
4

3 に答える 3

2

(i + 1)番目の位置に文字を追加しています\0-これは文字列の終わりを示しているため、印刷されるのはそれだけです。その行の前に、cSur にはおそらく姓全体が含まれています。

于 2012-05-29T23:36:00.283 に答える
2

ほとんどのコードは C によく似ており、C 標準ライブラリを十分に活用していません。C++ では、次のように書きます。

int pos = Address.find_first_of(" _-.");

std::string FirstName(Address, 0, pos);
std::string SurName(Address, pos);

なんらかの理由で C スタイルの文字列を使用することに固執する場合はstrpbrk、区切り文字を見つけることから始めることを検討してください。

于 2012-05-29T23:52:34.543 に答える
0
cSur[i] = '\0';

間違っています。i は名の長さです。cSur はすでに strcpy によってゼロ終端されています。

それを説明したので、Jerry Coffin の答えは、優れた C++ コードとして私が推奨するものです。

于 2012-05-30T00:43:11.357 に答える