狡猾擴展思路:
#include <map>
#include <memory>
#include <functional>
#include <algorithm>
#include <iostream>
#include <sstream>
int main()
{
std::string name = " Martin Paul Jones ";
std::string::size_type s = name.find_first_not_of(" \t\n\r");
std::string::size_type e = name.find_last_not_of(" \t\n\r");
std::string trim = name.substr(s, (e - s + 1));
std::string first = trim.substr(0, trim.find_first_of(" \t\n\r"));
std::string last = trim.substr(trim.find_last_of(" \t\n\r") + 1);
std::cout << "N(" << name << ") " << " T(" << trim << ") First(" << first << ") Last(" << last << ")\n";
// Alternative using streams
std::stringstream namestream(name);
namestream >> first >> last;
while(namestream >> last) { /* Empty */ } // Skip middle names
std::cout << "N(" << name << ") First(" << first << ") Last(" << last << ")\n";
}
嘗試:
> g++ xx.cpp
> ./a.out
N( Martin Paul Jones ) T(Martin Paul Jones) First(Martin) Last(Jones)
N( Martin Paul Jones ) First(Martin) Last(Jones)
我知道你可能會寫這一個簡單的使用,但你應該知道,分裂名稱可以是冒險的;有兩個字的姓,首先是姓,等等。 – Cascabel 2011-01-09 01:16:38