c++ string, vector<char>与char及其他类型互换

本文详细介绍了在C++中如何将vector&lt;char&gt;、char数组和int类型转换为string类型的方法,包括使用insert函数进行vector&lt;char&gt;到string的转换,直接赋值实现char数组到string的转换,以及利用stringstream完成int到string的转换。
部署运行你感兴趣的模型镜像

相信大家在用string的时候需要用到类型转换,下面是几种常见的转换方式。

// vector<char>, string转换
// vector<char>与string本质上都是STL内部的程序,是可以用insert来转换的 

#include <bits/stdc++.h> // c++标准库
using namespace std ;

int main()
{
    vector<char> my_vec;
    
    my_vec.push_back('H') ;
    my_vec.push_back('e') ;
    my_vec.push_back('l') ;
    my_vec.push_back('l') ;
    my_vec.push_back('o') ;
    
    string s ;
	s.insert(s.begin()/*插入的位置*/, my_vec.begin()/*插入对象的开始位置*/, my_vec.end()/*插入对象的结束位置*/) ;
	
	cout << s ; 
}

运行效果:

运行效果

 

 

 

 

 

 

 

 

 

 

 

那么char数组呢?也可以直接使用string赋值,string内部已经重载了这个操作(STL棒棒哒!)

// char[], string转换

#include <bits/stdc++.h> // c++标准库
using namespace std ;

int main()
{
    char ch[5] ;
    
    ch[0]='H' ;
    ch[1]='e' ;
    ch[2]='l' ;
    ch[3]='l' ;
    ch[4]='o' ;
    
    string s ;
	s = ch; // 直接赋值
	
	cout << s ; 
}

运行效果:

运行效果

 

 

 

 

 

 

 

 

 

 

 

转int也可以

// int, string转换

#include <bits/stdc++.h> // c++标准库
using namespace std ;

void toint(string s)
{
	stringstream ss ; // 声明一个流
	ss << s ; // 把s“灌进 ”流里面去
	int t ;
	ss >> t ; // 再把流“倒出 ”到t里面去
	
	cout << t ; 
}

int main()
{
    string s ;
	s = "12345";
	
	toint(s) ;
}

运行效果

运行效果

您可能感兴趣的与本文相关的镜像

Qwen3-8B

Qwen3-8B

文本生成
Qwen3

Qwen3 是 Qwen 系列中的最新一代大型语言模型,提供了一整套密集型和专家混合(MoE)模型。基于广泛的训练,Qwen3 在推理、指令执行、代理能力和多语言支持方面取得了突破性进展

```markdown ## 题目重述 目标是让左右两边河墩上的青蛙交换位置。给定相同数量的两种青蛙,初始时分别位于河墩的两侧,中间有一个空位。青蛙移动规则如下: 1. 若前面一个河墩为空,青蛙可以直接跳过去; 2. 若前面隔一个河墩是空的(无论隔的是哪种颜色的青蛙),可以从其头上跳过去到达空位。 要求用 C++ 实现,青蛙数量由输入决定,青蛙可以向左或向右跳跃。 ## 给出答案(答案为带注释的代码块) ```cpp #include <iostream> #include <vector> #include <string> #include <queue> #include <unordered_set> using namespace std; // 将状态转换为字符串用于哈希 string stateToString(const vector<char>& state) { return string(state.begin(), state.end()); } // 打印当前状态 void printState(const vector<char>& state) { for (char c : state) { cout << c; } cout << endl; } // 广度优先搜索求解青蛙跳河问题 bool solveFrogJump(int n) { // 初始状态:左n个'>',中间一个'_', 右n个'<' vector<char> start(2 * n + 1, '_'); for (int i = 0; i < n; ++i) { start[i] = '>'; start[i + n + 1] = '<'; } // 目标状态:左n个'<', 中间'_', 右n个'>' vector<char> target(2 * n + 1, '_'); for (int i = 0; i < n; ++i) { target[i] = '<'; target[i + n + 1] = '>'; } queue<vector<char>> q; unordered_set<string> visited; q.push(start); visited.insert(stateToString(start)); while (!q.empty()) { vector<char> curr = q.front(); q.pop(); if (curr == target) { cout << "找到解!" << endl; return true; } int blankPos = -1; for (int i = 0; i < curr.size(); ++i) { if (curr[i] == '_') { blankPos = i; break; } } // 尝试所有可能的跳跃 // '>' 向右跳(当前位置为 blank,左边是 '>') if (blankPos > 0 && curr[blankPos - 1] == '>') { // 直接跳 if (blankPos >= 1) { vector<char> next = curr; swap(next[blankPos], next[blankPos - 1]); string ns = stateToString(next); if (visited.find(ns) == visited.end()) { visited.insert(ns); q.push(next); } } // 跳过一个(隔一个跳) if (blankPos >= 2 && curr[blankPos - 2] == '>') { vector<char> next = curr; swap(next[blankPos], next[blankPos - 2]); string ns = stateToString(next); if (visited.find(ns) == visited.end()) { visited.insert(ns); q.push(next); } } } // '<' 向左跳(当前位置为 blank,右边是 '<') if (blankPos < curr.size() - 1 && curr[blankPos + 1] == '<') { // 直接跳 if (blankPos + 1 < curr.size()) { vector<char> next = curr; swap(next[blankPos], next[blankPos + 1]); string ns = stateToString(next); if (visited.find(ns) == visited.end()) { visited.insert(ns); q.push(next); } } // 跳过一个 if (blankPos + 2 < curr.size() && curr[blankPos + 2] == '<') { vector<char> next = curr; swap(next[blankPos], next[blankPos + 2]); string ns = stateToString(next); if (visited.find(ns) == visited.end()) { visited.insert(ns); q.push(next); } } } } cout << "无解!" << endl; return false; } int main() { int n; cout << "请输入每种青蛙的数量 n: "; cin >> n; if (n <= 0) { cout << "n 必须大于 0" << endl; return 1; } if (!solveFrogJump(n)) { cout << "无法完成交换。" << endl; } return 0; } ``` ## 代码解析 1. **状态表示**:使用 `vector<char>` 表示河墩状态,`>` 表示向右跳的青蛙,`<` 表示向左跳的青蛙,`_` 表示空位。 2. **BFS 搜索**:使用广度优先搜索(BFS)遍历所有合法状态,避免重复访问。 3. **状态哈希**:将状态转为字符串存入 `unordered_set` 实现去重。 4. **移动规则**: - `>` 青蛙只能向右移动(跳到空位),可前进1步或跳过一只青蛙前进2步; - `<` 青蛙只能向左移动,规则对称。 5. **终止条件**:当状态变为目标状态(左右青蛙互换)时停止。 ## 知识点(列出该代码中遇到的知识点) - **广度优先搜索(BFS)**:用于遍历状态空间,寻找最短路径解。 - **状态去重哈希**:避免重复搜索,提升效率,使用字符串哈希存储状态。 - **模拟状态转移**:通过交换空位青蛙模拟移动,实现状态演化。 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值