IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c语言 字符串的系列操作(字符串的逆序输出、字符串类型与int、double的互相转换) -> 正文阅读

[C++知识库]c语言 字符串的系列操作(字符串的逆序输出、字符串类型与int、double的互相转换)

?1.字符串的逆序输出

c语言把字符串逆转看起来是一件非常简单的事情,就如同把数组逆序一样,本质上字符串就是一个char类型的数组,但是其中有不少的细节值得注意。?

#include<stdio.h>

#include<string.h>

//参数char *str? 不用const

void reverse(char *str){//不同于数组,不需要传递长度

? ? ? ? size_t len = strlen(str);//长度

? ? ? ? size_t?i;//size_t可以理解为 unsiged int ,使用size_t可能会提高代码的可移植性、有效性或者可读性。

? ? ? ? for(i=0;i<len/2;i++){

? ? ? ? ? ? ? ? char temp;

? ? ? ? ? ? ? ? temp = *(str+i);//当然你也可以使用中括号的形式。

? ? ? ? ? ? ? ? *(str+i) = *(str+len-i-1);

? ? ? ? ? ? ? ? *(str+len-i-1) = temp;

????????}

}?

ok,函数已经写好了,只需要输入一个字符串即可调用。但大多数人都会直接用双引号(char *str = "Hello world!")这是字面值的定义存储在字面值常量区只读空间无法进行修改。

//主函数

int main(){

? ? ? ? char str[20]? = “Hello world!”;

? ? ? ? reverse(str);

? ? ? ? puts(str);//也可以用for循环逐个输出

}

2.?int 转化为字符串类型

这个问题在c语言当中char的类型本质上就是int类型来存储的,下面这段代码就很好的说明问题。

#include<stdio.h>

int main(){
? ? ? ? int i = 97;
? ? ? ? char c = 'a';
? ? ? ? printf("int i_d = %d\n",i);
? ? ? ? printf("int i_c = %c\n",i);
? ? ? ? printf("char c_d = %d\n",c);
? ? ? ? printf("char c_c = %c\n",c);
? ? ? ? return 0;
}

?那么要把int 转化成字符串,无非就是将每一位放到字符串数组中去。但是输入的整数的正负号是一个要好好思考的点。

void int2str(int num,char *str){

? ? ? ? int flag = num>0?1:-1;//判断正负

? ? ? ? num = num*flag;//相当于取绝对值的过程,全部转化成正数处理。

? ? ? ? int i=0;

? ? ? ? while(num){

? ? ? ? ????????str[i++] = num%10+'0';//转化为int进行运算

????????????????//很显然这个结果是逆序的,那我们上面所作的字符串逆序就派上用场了

? ? ? ? ????????num/=10;

? ? ? ? }

? ? ? ? if(flag==-1){

? ? ? ? ? ? ? ? str[i++] = '-'; //字符串长度要多预留1。

????????}

? ? ? ? str[i] = '\0';

? ? ? ? reverse(str);

}

?3.字符串转int

有了int转字符串的经验,字符串转int应该能够得心应手。其中任然要注意正负号的问题,以及读取字符串结束的标志为读到‘\0’。

void str2int(char *str,int *num){// 你要改变主函数中的整数,应该操作该数的地址

? ? ? ? assert(str!=NULL);// 断言这个字符串不为空。

????????int flag;

? ? ? ? flag = *str=='-' ? 1:-1;?

? ? ? ? str?= (*str=='-' || *str=='+')? ++str:str;

? ? ? ? int n = 0;

? ? ? ? while(*str){

? ? ? ? ? ? ? ? assert(*str>='0' && *str<='9');

? ? ? ? ? ? ? ? n = 10*n + (*str-'0');

? ? ? ? ? ? ? ? ++s;?

????????}

? ? ? ? n*=flag;//正负问题

? ? ? ? *num = n;

}

4.字符串转化为double类型

这个问题无非就是如何处理小数点的问题,但是精度问题没法解决。

void str2double?(const char *str,double *num){

? ? ? ? assert(*str!=NULL);

????????int flag;

? ? ? ? flag = *str=='-' ? 1:-1;?

? ? ? ? str?= (*str=='-' || *str=='+')? ++str:str;

? ? ? ? int doit = 0;//判断出现过小数点没

? ? ? ? double?n = 0;

????????assert(*s!='\0');

? ? ? ? double?m = 10;

? ? ? ? while(*str){

? ? ? ? ? ? ? ? if(*str=='.'){

????????????????????????? ? ?++diot;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?assert(diot<=1);

????????????????}else{

? ? ? ? ? ? ? ? ? ? ? ? assert(*str>='0' && *str<='9');

? ? ? ? ? ? ? ? ? ? ? ? if (idot){

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? n = n+(*s-'0')/m;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? m*=10;

????????????????????????}else{

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? n = n*10 +(*s - '0');

????????????????????????}? ? ??

????????????????}

? ? ? ? ? ? ? ? ++s;

????????}

? ? ? ? n*=flag;//正负问题

? ? ? ? *num = n;

}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-15 18:05:37  更:2021-12-15 18:07:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:29:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码