C++解析含逗号分号双分隔符字符串构建图边的方法求解
问题说明
- 待处理的原始字符串:
string str ="abc,def,0.9;ghi,jkl,109;mno,par,155";
- 解析目标:提取图结构的边信息,共3条边:
- 节点
abc与def相连,边权重0.9 - 节点
ghi与jkl相连,边权重109 - 节点
mno与par相连,边权重155
- 节点
- 现存问题:原有实现仅将逗号作为
getline的分隔符,会把0.9;ghi识别为同一个子串,无法正确拆分字段。
问题根因
原逻辑只处理了单条边内部的字段分隔符,,完全没有处理不同边之间的分隔符;,因此跨边的相邻字段会被错误拼接。另外循环条件使用原字符串的字符长度作为终止判断也不符合流读取的逻辑,容易出现多余的空值读取问题。
实现方案
采用两级拆分的思路处理即可:
- 第一级以
;为分隔符切割原始字符串,切割后每个子串对应一条独立边的完整信息 - 第二级对每个边子串,以
,为分隔符切割,依次得到边的起点、终点、权重三个字段
参考实现代码:
#include <iostream> #include <sstream> #include <string> #include <vector> using namespace std; // 通用字符串拆分工具函数 vector<string> split(const string& input, char delimiter) { vector<string> tokens; string token; istringstream tokenStream(input); while (getline(tokenStream, token, delimiter)) { tokens.push_back(token); } return tokens; } int main() { string str = "abc,def,0.9;ghi,jkl,109;mno,par,155"; // 第一步拆分出所有边 vector<string> edgeList = split(str, ';'); for (const string& edgeStr : edgeList) { // 第二步拆分单条边的三个字段 vector<string> fields = split(edgeStr, ','); string startNode = fields[0]; string endNode = fields[1]; double weight = stod(fields[2]); // 此处替换为你实际构建图边的业务逻辑即可 cout << "解析到边:" << startNode << " - " << endNode << ",权重:" << weight << endl; } return 0; }
运行上述代码的输出结果:
解析到边:abc - def,权重:0.9 解析到边:ghi - jkl,权重:109 解析到边:mno - par,权重:155
注意:你描述中提到第三条边的终点是pqr,但原始字符串对应位置为par,如果是笔误直接修改原始字符串对应内容即可。
内容的提问来源于stack exchange,提问作者jammy
相关产品推荐
相关产品推荐

