1

割り当ては基本的な「cin a full name」であり、次に「First Middle Last」ビットを取得します。ここで、ユーザーに完全な名前を単一の文字列に入力するように求めるプログラムを作成し、プログラムが名前を分離して出力します別々に編成しました。これは私が書いたものです:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string name;
    int index;
    index = name.find(' ');
    cin >> name;
    cout << "First name: " << name.substr(0, index) << endl;
    name = name.substr(index+1, name.length()-1);
    index = name.find(' ');
    cout << "Middle Name: " << name.substr(1, index) << endl;
    name = name.substr(index+1, name.length()-1);
    cout << "Last name: " << name;
    return 0;
}

コードはそれらを正しく分離せず、「名前」を正しく再定義しません。常に文字列の先頭に跳ね返ります。初心者のための助けはありますか?出力例を次に示します。

Teenage Wonder Land
First name: Teenage
Middle Name: eenag
Last name: Teena
Process returned 0 (0x0)   execution time : 7.942 s
Press any key to continue.
4

5 に答える 5

3

コンソールに入力する前に何も見つからずsbustr、インデックスから読み取る必要があります0

string name;
int index;
//index = name.find(' '); // comment out, name is empty, you won't find anything

cin >> name;
index = name.find(' '); // now you can find first space

cout << "Middle Name: " << name.substr(0, index) << endl;
//                                     ^

または単に使用するstd::stringstream

  #include <sstream>

  std::stringstream ss(name);
  std::string token;
  int i = 0;
  while(ss >> token)
  {
    switch(i)
    {
      case 0: 
        std::cout << "First name: " << token << std::endl;
        break;
      case 1: 
        std::cout << "Middle name: " << token << std::endl; 
        break;
      case 2: 
        std::cout << "Last name: " << token << std::endl; 
        break;
      default:
        break;
      i++;
    }
  }
于 2013-09-14T03:21:32.250 に答える
0
#include <iostream>
#include <string>

using namespace std;

string getnext(const string &full, const string &delim, size_t &beg) {
    size_t prev = beg;
    beg = full.find(delim, beg);
    if (beg != string::npos)
        return full.substr(prev, beg-prev);
    return full.substr(prev, full.length()-prev);
}

int main()
{
    string name, temp, error = "NameError: Enter first, middle, last";
    size_t index = 0;
    getline(cin, name); //Get the full name

    temp = getnext(name, " ", index); //Get first name
    if (index == string::npos) {
        cout << error;
        return -1;
    }
    cout << "First name: " << temp << endl;

    temp = getnext(name, " ", ++index); //Get middle name
    if (index == string::npos) {
        cout << error;
        return -1;
    }
    cout << "Middle Name: " << temp << endl;

    temp = getnext(name, " ", ++index); //Get last name
    cout << "Last name: " << temp << endl;
    return 0;
}
于 2013-09-14T05:18:57.470 に答える