转换总结

1.char*string:可以直接赋值。

2.char[]string:可以直接赋值。

3.char*char[]:不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数。

4.stringchar[]:不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数。

5.stringchar*:调用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++中字符串的表示与转换的更多相关文章

  1. js中字符串,数字之间转换的常用方法

    var number={ num:, num1:"2你好" }; //将数字转换为字符串 var str=number.num.toString();//十进制 );//二进制 ) ...

  2. C和C++中字符串与数的转换

    以下内容来自<C/C++程序设计实用案例教程> 1.在C语言中的转换方式 1.1数字转换为字符串 在C语言中,sprintf函数可以将任何多个数字格式化为指定格式的字符串,sprintf函 ...

  3. 字符串A转换到字符串B,只能一次一次转换,每次转换只能把字符串A中的一个字符全部转换成另一个字符,是否能够转换成功

    public class DemoTest { public static void main(String[] args) { System.)); } /** * 有一个字符串A 有一个字符串B ...

  4. java中字节数组byte[]和字符(字符串)之间的转换

    转自:http://blog.csdn.net/linlzk/article/details/6566124 Java与其他语言编写的程序进行tcp/ip socket通讯时,通讯内容一般都转换成by ...

  5. Java中数据类型及其之间的转换

    Java中数据类型及其之间的转换 基本的数据类型 基本类型有以下四种:1)int长度数据类型有:byte(8bits).short(16bits).int(32bits).long(64bits).2 ...

  6. [转]C#将image中的显示的图片转换成二进制

    本文转自:http://www.cnblogs.com/shuang121/archive/2012/07/09/2582654.html .将Image图像文件存入到数据库中 我们知道数据库里的Im ...

  7. 有两个地方,用到了javabean对象和属性字符串值之间的转换

    1.有两个地方,用到了javabean对象和属性字符串值之间的转换 2.一个是接入层spring mvc,将json字符串参数转换为javaBean.通过@RequestBody javaBean方式 ...

  8. js中字符串转换为数字的方法

    parseInt; parseFload; +; parseInt() 和 parseFloat() 函数会尝试逐个解析字符串中的字符,直到遇上一个无法被解析成数字的字符,然后返回该字符前所有数字字符 ...

  9. java中字符串String 转 int(转)

    java中字符串String 转 int String -> int s="12345"; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法 ...

随机推荐

  1. Java中static变量作用和用法详解

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static ...

  2. 关于gc中对象回收算法的认识

    之前学习java时,笔者看到很多学习资料说,gc判断object存活与否的算法是:给对象添加一个引用计数器,每当有一处地方引用它时,计数器值就加1,当引用失效时,计数器值就减1,当对象计数清零时,对象 ...

  3. 熟练使用WebApi开发

    在建立WebApi框架的时候,要想自己的业务需求是什么.例如PC端(前端),APP端都要使用的同一接口,就得考虑Webapi来提供接口支持了.最近公司刚好让我整合一下公司的接口项目(有WebServi ...

  4. EL表达式和JSTL(二)——BeanUtils工具

    BeanUtils工具 大对数人习惯使用JavaBean的get和set方法来获取和设置JavaBean的属性,但是在Java EE编程的过程中,会经常从配置文件中读取数据,但是从配置文件中读取的数据 ...

  5. PAT Advanced 1056 Mice and Rice (25) [queue的⽤法]

    题目 Mice and Rice is the name of a programming contest in which each programmer must write a piece of ...

  6. ubuntu19.10 相关软件安装

    1.Typora Typora是一款Markdown撰写软件,Linux版本也相当好用. Typora的安装方式如下: # or run: # sudo apt-key adv --keyserver ...

  7. P2P平台疯狂爆雷后,你的生活受到影响了吗?

    最近这段时间P2P爆雷的新闻和报道一直占据着各大财经和科技媒体的重要位置.而据网贷之家数据显示,截至2018年7月底,P2P网贷行业累计平台数量达到6385家(含停业及问题平台),其中问题平台累计为2 ...

  8. Python常用模块小结

    目录 Python常用模块小结 一.Python常用模块小结 1.1 time模块 1.2 datetime模块 1.3 random模块 1.4 os模块 1.5 sys模块 1.6 json模块 ...

  9. UEFI boot: how does that actually work, then?

    原文地址:https://www.happyassassin.net/2014/01/25/uefi-boot-how-does-that-actually-work-then/ 翻译:https:/ ...

  10. html标签title属性值包括处理

    用js赋给title属性的html实体,<br/>无法解析,导致 也无法解析,应该使用\r\n代替,使用 无法实现换行,因为没有经过浏览器的再解析. str_info.replace(/\ ...