C ++将输入字符串解析为变量

Posted

技术标签:

【中文标题】C ++将输入字符串解析为变量【英文标题】:C++ Parsing input string to variables 【发布时间】:2013-11-04 12:20:25 【问题描述】:

我需要做的就是将输入的全名字符串解析为 3 个单独的名称,这样我就可以获取每个名称的首字母并打印它们。谁能指出我正确的方向?

#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;    
int main()

    string [parsed_output] = fullName.split(" ");
    string firstName = parsed_output[0];
    string middleName = parsed_ouput[1];
    string lastName = parsed_output[2];
    string fullName;
    char firstLetter = firstName[0];
    char middleLetter = middleName[0];
    char lastLetter = lastName[0];
    cout << "Enter your first name, middle name or initial, and last name separated by                              spaces: \n"; 
    cin >> fullName;

    cout << "Your initials are: " << firstLetter << middleLetter << lastLetter << '\n';
    cout << "Your name is: " << firstName << " " << middleName << " " << lastName << '\n';
return 0;

【问题讨论】:

检查:***.com/questions/5607589/… - 拆分名称后,继续遍历子字符串并为每个子字符串打印第一个字符,即如果length() &gt; 0 打印subString[0]。如下面的答案所示,您也可以单独取名字。除非一次处理完整名称是绝对要求。 fullName 未声明,您想在放入任何内容之前对其进行解析吗?我认为您首先需要一些基础知识。 【参考方案1】:

你让事情变得复杂了。 'parsed_output[0];' 是什么意思还是“全名”?你可以这样做:

#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;    

int main()

  string firstName, middleName, lastName;
  cout << "Enter your first name, middle name or initial, and last name separated by                              spaces: \n"; 
  cin >> firstName >> middleName >> lastName;
  char firstLetter = firstName[0];
  char middleLetter = middleName[0];
  char lastLetter = lastName[0];
  cout << "Your initials are: " << firstLetter << middleLetter << lastLetter << '\n';
  cout << "Your name is: " << firstName << " " << middleName << " " << lastName << '\n';
  return 0;

std::cin 的全部要点是,您可以使用提取运算符“>>”获得一个以空格分隔的标记的流。如果您想手动提取名字、中间名和姓氏(如在 hasans 答案中),那么您首先需要整个字符串(一个包含所有 3 个名称和空格的字符串作为限制器)。要读入包含空格的输入,您可以使用std::getline(std::cin, fullName) 而不是std::cin,因为std::cin 将提取输入,直到遇到第一个尾随空格。

【讨论】:

【参考方案2】:

您可能想使用例如std::getline 获取全名,std::istringstream 用于解析:

std::string fullName;
std::getline(std::cin, fullName);

std::istringstream iss(fullName);

std::string firstName, middleName, lastName;
iss >> firstName >> middleName >> lastName;

【讨论】:

std::cin &gt;&gt; fullName 不会停在空白处吗?您需要使用 std::getline 来要求解析。

以上是关于C ++将输入字符串解析为变量的主要内容,如果未能解决你的问题,请参考以下文章

如何将给定的字符串解析为结构变量数组

C ++如何将用户的输入解析为要执行的代码? [关闭]

使用分隔符C ++将字符串解析为整数

为啥C语言编程时输入数字转化为了ASC码

参数解析(得到输入参数)

C语言 将整型变量赋值为空