C++使用Stringstream转换int与string

1星 需积分: 16 1 下载量 163 浏览量 更新于2024-08-04 收藏 434B TXT 举报
"这篇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的相互转换。
2023-06-02 上传
2023-06-02 上传

class SR_net { public: SR_net(string path, vector<int> input_size, bool fp32, bool cuda = true); private: vector<int64_t> Gdims; int Gfp32; Env env = Env(ORT_LOGGING_LEVEL_ERROR, "RRDB"); SessionOptions session_options = SessionOptions(); Session* Gsession = nullptr; vector<const char*> Ginput_names; vector<const char*> Goutput_names; vector<int> Ginput_size = {}; }; SR_net::SR_net(string path, vector<int> input_size, bool fp32, bool cuda) { this->Ginput_size = input_size; this->Gfp32 = fp32; clock_t startTime_, endTime_; startTime_ = clock(); session_options.SetIntraOpNumThreads(6); if (cuda) { OrtCUDAProviderOptions cuda_option; cuda_option.device_id = 0; cuda_option.arena_extend_strategy = 0; cuda_option.cudnn_conv_algo_search = OrtCudnnConvAlgoSearchExhaustive; cuda_option.gpu_mem_limit = SIZE_MAX; cuda_option.do_copy_in_default_stream = 1; session_options.AppendExecutionProvider_CUDA(cuda_option); } wstring widestr = wstring(path.begin(), path.end()); this->Gsession = new Session(env, widestr.c_str(), this->session_options); this->session_options.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_ALL); AllocatorWithDefaultOptions allocator; this->Ginput_names = { "input" }; this->Goutput_names = { "output" }; endTime_ = clock(); cout << " The model loading time is:" << (double)(endTime_ - startTime_) / CLOCKS_PER_SEC << "s" << endl; } int main() { vector<int> input_shape = {}; SR_net net("E:/prj/SR_C/onnx_file/rrdb_full.onnx", input_shape, true, true); },在这段代码中,我如何把SR_net net("E:/prj/SR_C/onnx_file/rrdb_full.onnx", input_shape, true, true);这一行写到主函数的外面?

2023-06-02 上传
2023-06-02 上传
2023-06-03 上传