当一个部分可以有空格时,如何将字符串解析为多个变量
How to parse a string into multiple variables when one part can have spaces?
我有一个字符串,我需要把它分成四个变量:cmd1, cmd2, id, address。
我有这个:
string x = "ADD ADDRESS 001 21 PARKWAY DRIVE";
string cmd1, cmd2, id, address;
istringstream ss(x);
ss >> cmd1 >> cmd2 >> id >> address;
cout << cmd1 << endl << cmd2 << endl << id << endl << address;
问题是,如果地址输入中有一个空格,它将只接受输入到第一个空格,就像stringstream一样,那么我如何获得整个地址并将其存储到"address"中?
查找这个:
INPUT: ADD ADDRESS 001 21 PARKWAY DRIVE
STORED:
cmd1 = ADD
cmd2 = ADDRESS
id = 001
address = 21 PARKWAY DRIVE
现在,我得到这个:
INPUT: ADD ADDRESS 001 21 PARKWAY DRIVE
STORED:
cmd1 = ADD
cmd2 = ADDRESS
id = 001
address = 21
也许有一个更好的方法,除了stringstream,以这种方式分割字符串?
一种方法是读取字符串直到id:
ss >> cmd1 >> cmd2 >> id;
,然后使用getline for address:
getline(ss, address);
还可以使用一个名为substr的字符串函数或使用ws:
来删除额外的空格。address = address.substr(1,address.size()); or
ws(ss);
所以你的程序看起来像:
#include <iostream>
#include <sstream>
using namespace std;
int main(){
string x = "ADD ADDRESS 001 21 PARKWAY DRIVE";
string cmd1, cmd2, id, address;
istringstream ss(x);
ss >> cmd1 >> cmd2 >> id;
ws(ss);
getline(ss, address);
cout << cmd1 << endl << cmd2 << endl << id << endl << address;
return 0;
}
您可以使用正则表达式来完成这项工作。它允许你跳过多余的空格,如果需要的话,做一些验证(例如只接受大写)等。
#include <iostream>
#include <regex>
int main() {
const std::string x = "ADD ADDRESS 001 21 PARKWAY DRIVE";
const auto regex = std::regex(R"(^(w+)s+(w+)s+(w+)s+(.+)$)");
std::smatch result;
if (std::regex_match(x, result, regex)) {
for (size_t i = 1; i < result.size(); ++i) {
std::cout << result[i] << std::endl;
}
}
return 0;
}
使用std::getline(ss, address)
将该行的剩余部分读入address
。您也可以先使用ss >> std::ws
,以丢弃任何前导空格。
ss >> cmd1 >> cmd2 >> id;
getline(ss, address);
address = address.substr(1, address.size());
相关文章:
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 从字符串变量中逐字符读取单词
- 对函数 PlaySound 使用字符串变量
- C++中的字符串变量
- 字符串变量,比如说"字符串str",可以直接复制到数组中吗?
- 我可以用字符串变量而不是它的名字创建容器吗? C++
- 字符串变量的大小
- 为什么我的字符串变量没有打印完整的字符串?
- 字符串变量未更新 c++
- 如何使用 setfill 和 setw 在字符串变量中存储十六进制值
- 在.cpp文件之间传递全局字符串变量?
- 字符串变量顺序
- 为什么可以将整数分配给字符串变量?
- 在qt创建器中调试时如何访问字符串变量的完整值?
- 将字符串变量分配给无符号字符变量
- 在 c++ 中使用字符串变量选择静态类结构,而不带对象
- C++我应该用什么来保存格式化为字符串变量(如sprintf())的文件
- 我有一个字符串变量单词= "APA"
- 将字符串变量从 bash 脚本传递到根宏