如何输出以姓氏开头的全名?如果名字或姓氏由单词组成,该怎么办?

时间:2018-02-06 14:48:04

标签: c++

我需要一些帮助(C ++)

创建一个将输入全名的程序,但输出全名将以姓氏开头。

我附上了我的代码但这段代码只会读取名字的第一个单词或姓氏的第一个单词。如果名字或姓氏有两个单词怎么办?谢谢。

<pre>
#include <iostream>
#include <string> 
using namespace std;

main()
{
   string first, middle, last;
   cout << "What is your full name? ";
   cout << endl << "---> ";
   cin >> first >> middle >> last;

   cout << "---> " << last << ", " << first << " " << middle;
   cout << endl;

   return 0;



 }
<code>

full name program

2 个答案:

答案 0 :(得分:0)

如果读取失败(即没有读取单词),输入流将处于故障状态。因此,解决方案是在每次读取后测试流状态。

export default class Body extends Component {
constructor(){
    super();
    this.state = {
        persons: [] // This should be an empty array by default
    }
}

handleSubmit(e){
    getRequest.fetchData()
    .then(function(response){
        if(response.status === 404){
            alert("Unbekannter Name");
        }else{
            this.setState(function(){
                return {
                    persons: response.data
                }
            })    
        }
    }.bind(this));
}

render() {
    return ( 
        <div>
            <Form handleSubmit={this.handleSubmit.bind(this)}/>
            this.state.persons.map((person, i) => {
               <Layout key={i} person={person}/>
            }
        </div>
    );
}
}

如果每个名称和输出都不为空,则应测试它们。

答案 1 :(得分:0)

我认为这可能是你的意思,来自一个例子名称:

&#34;第一个中间的中间2 ...中间的最后一个&#34;

您想输出

&#34;最后,第一个中间......中间n&#34;。

要做到这一点,你可以..

  • 使用std::getline(cin, name)获取名称。

使用cin >> name会在符合空格" "时截断字符串。这意味着只获得第一个&#34;字&#34;在空白之前。

要避免这种情况,请使用getline

  • 使用string::find_last_of(" ")

  • 使用string::substr(pos, span)获取所需的子字符串。

http://www.cplusplus.com/reference/string/string/substr/

以下是代码:

#include <iostream>
    #include <string> 
    using namespace std; 
    int main() { 
        string name, last; 
        cout << "What is your full name? "; 
        cout << endl << "---> "; 
        getline(cin,name);
        int idx;
        idx = name.find_last_of(" ");
        cout << idx << endl;
        last = name.substr(idx+1);
        cout << "---> " << last << ", " << name.substr(0, idx);
         cout << endl; return 0; }

示例输出:

What is your full name :
---> first middle middle2 middle3 last
28
---> last, first middle middle2 middle3