C++使用Stringstream转换int与string

1星 | 下载需积分: 50 | TXT格式 | 434B | 更新于2024-08-03 | 146 浏览量 | 1 下载量 举报
收藏
"这篇C++代码展示了如何使用Stringstream进行数据类型转换,特别是将int转换为string以及将string转换回int。在从string转换为int的过程中,如果遇到非数字字符,转换过程会立即停止。" 在C++编程中,`std::stringstream` 是一个非常有用的工具,它允许我们将字符串(string)当作输入/输出流(iostream)来处理,方便地在不同数据类型之间进行转换。`std::stringstream` 继承自 `std::istringstream` 和 `std::ostringstream`,结合了两者的能力,既可以读取也可以写入字符串。 在提供的代码中,有两个关键函数:`myAtoi` 和 `x`。`myAtoi` 函数用于将字符串转换为整数,而 `x` 函数则用于将整数转换为字符串。 1. `myAtoi(string s)` 函数: 这个函数接受一个字符串 `s` 作为参数,利用 `std::stringstream` 对象 `liu` 来尝试将字符串解析为整数。`liu >> n` 语句会从输入流中读取数值到变量 `n` 直到遇到非数字字符为止。如果字符串中包含非数字字符,`>>` 操作符会停止读取,并且 `n` 将包含之前读取到的数字部分。在示例中,`myAtoi("324342sadsdsa")` 将只读取 "324342",忽略后面的 "sadsdsa"。 2. `x(int m)` 函数: 这个函数接受一个整数 `m`,并返回其对应的字符串表示。这里同样使用了 `std::stringstream`,但这次是 `ostringstream` 的行为,通过 `sstream << m` 将整数写入输出流,然后 `sstream >> strResult` 读取流中的内容到 `strResult` 字符串中。这样,`x(n)` 将整数 `n` 转换为字符串。 在 `main` 函数中,可以看到这些函数的实际应用: - `cout << x(n) << endl;` 打印出整数 `n` 的字符串形式。 - `cout << x(n).length() << endl;` 输出字符串的长度,即 `n` 的位数。 - `cout << myAtoi("324342sadsdsa") << endl;` 将非空字符串转换为整数,只提取开头的数字部分。 `std::stringstream` 在C++中提供了一种灵活的方式来处理字符串与其它数据类型的转换,简化了在字符串和数值之间的操作。这个例子展示了如何在实际编码中利用它来实现int和string的相互转换。

相关推荐

filetype

#include <iostream> #include <vector> #include <string> #include <sstream> #include <cstdlib> using namespace std; struct TypeNode { string type_name; TypeNode* first = NULL; TypeNode* second = NULL; TypeNode(string t) : type_name(t), first(NULL), second(NULL) {} }; vector<TypeNode*> vars; vector<string> var_names; void addVariable(const string& name, const string& type_str) { if (type_str == “int” || type_str == “double”) { vars.push_back(new TypeNode(type_str)); } else { size_t pos = type_str.find(“<”); string base_type = type_str.substr(0, pos); if (base_type != "pair") { cerr << "Error: Invalid type definition!" << endl; exit(-1); } string inner_types = type_str.substr(pos + 1, type_str.size() - pos - 2); stringstream ss(inner_types); string left_type, right_type; getline(ss, left_type, ','); getline(ss, right_type); TypeNode* node = new TypeNode("pair"); node->first = new TypeNode(left_type); node->second = new TypeNode(right_type); vars.push_back(node); } var_names.push_back(name); } TypeNode* getTypeNodeByName(const string& name) { for (size_t i = 0; i < var_names.size(); ++i) { if (var_names[i] == name) return vars[i]; } return NULL; } string queryType(TypeNode* root, const vector<string>& steps) { if (!root) return “”; if (steps.empty()) return root->type_name; string step = steps.front(); if (step == "first" && root->first) { return queryType(root->first, vector<string>(steps.begin() + 1, steps.end())); } else if (step == "second" && root->second) { return queryType(root->second, vector<string>(steps.begin() + 1, steps.end())); } else { return ""; } } string resolveQuery(const string& query_str) { size_t dot_pos = query_str.find(‘.’); string var_name = query_str.substr(0, dot_pos); string rest = query_str.substr(dot_pos + 1); TypeNode* root = getTypeNodeByName(var_name); if (!root) return ""; vector<string> steps; while (!rest.empty()) { size_t next_dot = rest.find('.'); string current_step = rest.substr(0, next_dot); steps.push_back(current_step); if (next_dot == string::npos) break; rest = rest.substr(next_dot + 1); } return queryType(root, steps); } int main() { int n, q; cin >> n >> q; cin.ignore(); for (int i = 0; i < n; ++i) { string line; getline(cin, line); size_t space_pos = line.find(’ '); string type_def = line.substr(0, space_pos); string var_name = line.substr(space_pos + 1); if (!var_name.empty() && var_name[var_name.size()-1] == ‘;’) { var_name.erase(var_name.size()-1); } addVariable(var_name, type_def); } for (int i = 0; i < q; ++i) { string query; cin >> query; cout << resolveQuery(query) << endl; } return 0; }样例输入 #1 5 5 int a1; double a2; pair<int,int> pr; pair<pair<int,int>,pair<int,int>> BBKKBKK; pair<int,pair<pair<double,int>,double>> __frost_ice; a1 a2 pr.first BBKKBKK __frost_ice.second.first.second 错误输出: int 期望输出: int double int pair<pair<int,int>,pair<int,int>> int 给出上述代码改正后

5 浏览量
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部