C++ 我怎样才能编写代码,让计算机知道两个名字条目和三个名字条目之间的区别? char first[20],middle[20],last[20]; cout>首先; cin>>中间; 最后;

C++ 我怎样才能编写代码,让计算机知道两个名字条目和三个名字条目之间的区别? char first[20],middle[20],last[20]; cout>首先; cin>>中间; 最后;,c++,C++,非常简单,任务是编写代码,这样,如果用户输入“John smith”,它将输出“smith,John”,如果用户输入“John x.smith”,它将输出“smith,John x”。这里的代码仅适用于3个姓名条目,有没有办法在不弄乱三个名字的情况下,将其调整为能够读取两个名字的条目?我认为两个名字的情况下的问题是,cin需要三个输入。您可以使用从cin获取整行(因此它会一直阻塞到第一次输入)。然后您可以从中创建并提取三个名称。如果只有两个,在最后一次提取之后,stringstream将计算为f

非常简单,任务是编写代码,这样,如果用户输入“John smith”,它将输出“smith,John”,如果用户输入“John x.smith”,它将输出“smith,John x”。这里的代码仅适用于3个姓名条目,有没有办法在不弄乱三个名字的情况下,将其调整为能够读取两个名字的条目?

我认为两个名字的情况下的问题是,
cin
需要三个输入。您可以使用从
cin
获取整行(因此它会一直阻塞到第一次输入)。然后您可以从中创建并提取三个名称。如果只有两个,在最后一次提取之后,stringstream将计算为
false
,您可以使用
If(stream)
进行检查。(假设stringstream的名称是
stream

您可以使用一次读取整行内容,然后使用类似的方法来计算字符串中的单词

这可能看起来像:

char first[20], middle[20], last[20];
cout << "Enter you name (F/M/L or F/L) \n";
cin >> first;
cin >> middle;
cin >> last;
unsigned int countWordsInString(std::string const&str){
std::stringstream(str);
返回std::distance(std::istream_迭代器(stream),std::istream_迭代器());
}
int main(){
字符串全名;
无符号numWords=0;
while(numWords!=2&&numWords!=3){
std::getline(std::cin,全名);//将整行读入全名
numWords=countWordsInString(全名);
if(num_words==2){
//从全名中读取第一个/最后一个
}else if(num_words==3){
//从全名中读取第一个/中间个/最后一个
}否则{

std::cout读取一行中的全名,然后使用字符串标记器查看该名称有多少个单词。这将有助于生成通用代码,而不仅仅限于两个或三个单词的名称

使用上述方法,输入名称中可以有任意数量的单词

希望这有帮助!祝你有一个愉快的一天

unsigned int countWordsInString(std::string const& str) {
    std::stringstream stream(str);
    return std::distance(std::istream_iterator<std::string>(stream), std::istream_iterator<std::string>());
}

int main() {
    string full_name;
    unsigned numWords = 0;

    while (numWords != 2 && numWords != 3) {
        std::getline(std::cin, full_name); // Read the whole line into full_name
        numWords = countWordsInString(full_name);
        if ( num_words == 2 ) {
            // Read first/last from full_name
        } else if (num_words == 3) {
            // Read first/middle/last from full_name
        } else {
            std::cout << "Bad input. Input must be 'First Middle Last' or 'First Last'" << std::endl;
        }
    }
}