C++中字符串的表示与转换
转换总结
1.char*转string:可以直接赋值。
2.char[]转string:可以直接赋值。
3.char*转char[]:不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数。
4.string转char[]:不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数。
5.string转char*:调用string对象的c_str函数或data函数或copy函数。
6.char[]转char*:直接赋值即可。
使用时,要对源格式和目标格式进行初始化。源格式赋值为具体的内容,目标格式赋值为空。

便记
- 其他变成
string,直接赋值。 char[]变成其他,直接赋值。
例子 替换空格
请实现一个函数,将一个字符串中的每个空格替换成%20。例如,当字符串为We Are Happy,则经过替换之后的字符串为We%20Are%20Happy。
来源:替换空格
代码1
使用字符串的替换,最后通过strcpy(str, res)完成对原字符串的修改,这样代码更简短一些,编写也较为方便。
class Solution {
public:
void replaceSpace(char *str,int length) {
string s(str);
int i=0;
while((i=s.find(' ', i)) > -1)
{
s.erase(i, 1);
s.insert(i, "%20");
}
//auto自动识别变量类型
auto res = s.c_str();
strcpy(str, res);
}
};
分析
此题很简单,用python等一句便能通过。但是在C++中,关键在于函数所传的参数 char *str ,这是一个指针变量,主函数中应该是一个 char str[] 类型,需要通过此函数更改实参的值。所以最直接的方法便是通过指针遍历数组进行相应位置的修改,从而实现相关替换,也就是下面的代码。
代码2
这里是直接遍历数组进行相应更改,方向是从后往前。
因为更改时针对的是原字符串(具体实参)的修改,所以,更新的部分不应该破坏原来未访问到的部分,这里即是新的下标应一直大于旧的下标(pNew > pOld)。这样,通过从后往前的方法可以避免每次遇到空格都得移动未访问部分的问题(即从前往后时的缺陷),效率也会更高些。
class Solution {
public:
void replaceSpace(char *str,int length) {
if(str==NULL || length<0)
{
return;
}
int len=0,n=0;
for(int i=0; str[i] != '\0'; i++)
{
len++;
if(str[i] == ' ')
{
n++; //记录空格个数
}
}
int lenNew = len + n*2; //替换后字符串长度
if(lenNew > length)
{
return;
}
int pOld = len; //原字符串的下标,这里不减1,把'\0'也加上,下面pNew同理。
int pNew = lenNew; //更新中的字符串的下标
while(pOld >= 0 && pNew > pOld) //这里pNew > pOld,新的下标应一直大于旧的下标。
{
if(str[pOld] == ' ')
{
str[pNew--] = '0';
str[pNew--] = '2';
str[pNew--] = '%';
pOld--;
}
else
{
str[pNew--] = str[pOld--];
}
}
}
};
注:要理清参数 char *str 的实参究竟是什么。
参考
C++中string、char *、char[]、const char*的转换 此文描述详尽,记于此便于查阅。
C++中字符串的表示与转换的更多相关文章
- js中字符串,数字之间转换的常用方法
var number={ num:, num1:"2你好" }; //将数字转换为字符串 var str=number.num.toString();//十进制 );//二进制 ) ...
- C和C++中字符串与数的转换
以下内容来自<C/C++程序设计实用案例教程> 1.在C语言中的转换方式 1.1数字转换为字符串 在C语言中,sprintf函数可以将任何多个数字格式化为指定格式的字符串,sprintf函 ...
- 字符串A转换到字符串B,只能一次一次转换,每次转换只能把字符串A中的一个字符全部转换成另一个字符,是否能够转换成功
public class DemoTest { public static void main(String[] args) { System.)); } /** * 有一个字符串A 有一个字符串B ...
- java中字节数组byte[]和字符(字符串)之间的转换
转自:http://blog.csdn.net/linlzk/article/details/6566124 Java与其他语言编写的程序进行tcp/ip socket通讯时,通讯内容一般都转换成by ...
- Java中数据类型及其之间的转换
Java中数据类型及其之间的转换 基本的数据类型 基本类型有以下四种:1)int长度数据类型有:byte(8bits).short(16bits).int(32bits).long(64bits).2 ...
- [转]C#将image中的显示的图片转换成二进制
本文转自:http://www.cnblogs.com/shuang121/archive/2012/07/09/2582654.html .将Image图像文件存入到数据库中 我们知道数据库里的Im ...
- 有两个地方,用到了javabean对象和属性字符串值之间的转换
1.有两个地方,用到了javabean对象和属性字符串值之间的转换 2.一个是接入层spring mvc,将json字符串参数转换为javaBean.通过@RequestBody javaBean方式 ...
- js中字符串转换为数字的方法
parseInt; parseFload; +; parseInt() 和 parseFloat() 函数会尝试逐个解析字符串中的字符,直到遇上一个无法被解析成数字的字符,然后返回该字符前所有数字字符 ...
- java中字符串String 转 int(转)
java中字符串String 转 int String -> int s="12345"; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法 ...
随机推荐
- Samba 文件共享
介绍:用于Linux系统与Windows系统之间共享文件资源,小文件可以使用lrzsz,大文件可以使用samba 测试环境: [root@localhost home]# cat /etc/redha ...
- Storm 重启排查
Storm实战常见问题及解决方案 https://www.cnblogs.com/catkins/p/5302634.html Storm 重启排查(续) https://www.iteye.com/ ...
- Gradle project sync failed. Please fix your project and try again
https://stackoverflow.com/questions/29808199/error-running-android-gradle-project-sync-failed-please ...
- windows支持apache、mysql、php集成环境推荐wampserver3.2 64位版本
对英文不感冒的同学很容易下载到更新包,而且官方的下载速度很慢,此文件为官方原版下载,现在分享给大家. 链接:https://pan.baidu.com/s/1LYyJi6FddvkQQNrLp4L6W ...
- linux服务器开放防火墙和端口,以及查询状态
自己搞一个自己网站时候,购买的阿里云服务器,发现部署项目访问不到,首先需要确认入站规则是否配置. 一.安全组列表添加 1.打开安全组列表 2.添加入站规则 3.添加安全组规则 二.通过防火墙,开启端口 ...
- idea快捷键(最常用)
--跳到上一空白行 ctrl+alt+enter --跳到下一空白行 shift+enter --为代码生成包裹快(try catch等) ctrl+alt+t --跳到某行 ctrl+g --实现父 ...
- 设置Schema-Registry的配置,以支持Schema变化
设置Schema-Registry的配置,以支持Schema变化 https://blog.csdn.net/lzufeng/article/details/81566766 curl -X PUT ...
- UML-设想
样例:
- 吴裕雄--天生自然python学习笔记:python 用pygame模块动画一让图片动起来
动画是游戏开发中不可或缺的要素,游戏中的角色只有动起来才会拥有“生命”, 但动画处理也是最让游戏开发者头痛的部分.Pygame 包通过不断重新绘制绘图窗口,短短几行代码就可以让图片动起来! 动画处理程 ...
- G - Radar Scanner Gym - 102220G(中位数~~)
zThere are n rectangle radar scanners on the ground. The sides of them are all paralleled to the axe ...