打印字符串数组的第一个/最后一个元素时遇到问题

时间:2013-03-01 17:07:05

标签: c++ arrays string getline

只是想知道是否有人可以帮助我解决这个问题,程序总是因某些原因而崩溃,我不知道为什么。我还是C ++的新手,是的。是的。

它应该做什么:

  1. 创建一个包含5个可能元素的字符串数组。
  2. 从用户那里获取5个名字(名字和姓氏)
  3. 打印字符串数组的第一个和最后一个元素
  4. 创建一个字符串并让用户为该字符串分配一个句子。
  5. 从(4)
  6. 打印字符串

    步骤4,5很简单但我真的不知道如何在步骤3中显示字符串的最后一个元素。

    int x;
    string n1,n2,n3,n4,n5,user;
    string array[5]={n1,n2,n3,n4,n5};
    
    cout<<"Enter 5 names: "<<endl;
    
    getline(cin,n1);
    getline(cin,n2);
    getline(cin,n3);
    getline(cin,n4);
    getline(cin,n5);
    
    cout<<endl;
    
    for(x=0;x<5;x++)
    {
        int y=array[x].length();
        cout<<array[x].substr(0,1)<<"\t"<<array[x].substr(y,1)<<endl;
    }
    
    cout<<endl;
    cout<<"Enter sentence for string: "<<endl;
    getline(cin,user);
    cout<<user<<endl;
    
    system("pause");
    return 0;
    

1 个答案:

答案 0 :(得分:1)

与java不同,以下内容创建了5个不同的std :: string副本。因此,分配给n1不会影响数组[0]

 string n1,n2,n3,n4,n5,user;
 string array[5]={n1,n2,n3,n4,n5};

完成你所追求的“正确”方式就像是

std::vector<std::string> array(5);

std::cout << "Enter 5 names: " << std::endl;

for(std::size_t x=0;x<array.size();x++) {
    std::getline(std::cin, array[i]);
} 

我已经换出了一个矢量的原始数组,几乎在所有情况下都应优先于数组。

http://en.cppreference.com/w/cpp/container/vector