C++中对字符操作的函数集锦
来源:互联网 发布:java getberlength 编辑:程序博客网 时间:2024/05/17 04:17
下面是要讲解的目录:
/*1.字符转数字(atoi,atol,atof)2.查找(strstr)3.比较(strcmp)4.复制(strcpy,memcpy)5.连接两字符串(strcat)6.逆置字符数组(strrev)7.小写字母转大写(strupr)*/
1.字符转数字(atoi, atol, atof)
#include<iostream> #include<cstdlib> //头文件 #include<string> using namespace std;int main(){//1.函数原型:int atoi (const char * str); char ch1[10] = "123.2abc"; char ch2[10] = "abc123";//从当前地址开始往后查找,遇见非数字或'.'或'\0'停止工作 int a = atoi(ch1); int b = atoi(ch2);cout << a << endl;//123 当前地址往后为123,到'.'结束 cout << b << endl;//0 当前地址上字符为a,直接结束,返回0 //这里存在一个问题,如果当前本不是数字呢?直接结束,然后返回0,但是如果是这种 //情况呢。char ch[10]="0abc";它的结果也是返回0,如果你要使用if语句,这里是不严 //谨的,所以建议如果你使用atoi ,那么应该是在你知道这个字符数组当前位置即是数字 //的情况下。 string str = "a123bcef";//这里使用string int c = atoi(&str[0] + 1);cout << c << endl;//123 //2.函数原型:long int atol ( const char * str ) //3.函数原型:double atof (const char* str) //同上,不需多说 return 0;}
2.查找(strstr)
#include<iostream> #include<cstring> //头文件 #include<string> using namespace std;int main(){/*函数原型:const char * strstr ( const char * str1, const char * str2 ); char * strstr(char * str1, const char * str2);*/char ch[10] = "abcdef";char *p, *pp;p = strstr(ch, "cd");pp = strstr(ch, "12");//找不到返回NULL cout << p << endl;if (pp == NULL) { cout << "无法找到!\n"; }/*输出:cdef无法找到!*//*p = strstr(ch, "a");//对单字符的查找cout << p;//abcdef*/return 0;}
3.比较(strcmp)
#include<iostream> #include<string.h>//头文件 using namespace std;int main(){//函数原型:int strcmp ( const char * str1, const char * str2 ); char a[10] = "abc";char b[10] = "ABC";char c[10] = "abc";if (strcmp(a, b)>0) cout << "a>b" << endl;//a>b if (strcmp(b, a)<0) cout << "a<b" << endl;//a<b if (strcmp(a, c) == 0) cout << "a==b" << endl;//a==b return 0;}
4.复制(strcpy, memcpy)
strcpy和memcpy都是标准C库函数,它们有下面的特点。
strcpy提供了字符串的复制。即strcpy只用于字符串复制,
并且它不仅复制字符串内容之外,还会复制字符串的结束符。
已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);
memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。
我们来看函数原型就知道了:void * memcpy(void * destination, const void * source, size_t num);
关于void*代表什么意思,建议读者百度,关于它的博客很多,这里不作讲解。
strcpy和memcpy主要有以下3方面的区别。
1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy
我们重点讲解memcpy,也推荐读者多多使用这个函数
#include <stdio.h> #include <string.h> int main(){char str1[] = "Sample string";char str2[40];char str3[40];strcpy(str2, str1);strcpy(str3, "copy successful");printf("str1: %s\nstr2: %s\nstr3: %s\n", str1, str2, str3);/*输出:str1: Sample stringstr2: Sample stringstr3: copy successful*/return 0;}
下面来看memcpy函数的使用
#include<iostream> #include<string.h>//头文件 using namespace std;int main(){//1. char ch1[10] = "123456";char ch2[10];memcpy(ch2, ch1, sizeof(ch1));//注意最后的'\0',也复制进去 cout << ch2 << endl;//123456 //2. int a[10] = { 1,2,3,4,5,6,7,8,9,10 };int b[5];memcpy(b, a, sizeof(int) * 5);//这里只复制前5个 for (int i = 0; i<5; i++)cout << b[i] << " ";//1 2 3 4 5 return 0;}
5.连接两字符串(strcat)
#include<iostream>#include<string.h>//头文件using namespace std;int main(){//函数原型:char * strcat ( char * destination, const char * source );char ch[10] = "123";char ch1[3] = "45";strcat(ch, ch1);//注意要保证ch有足够的空间存储cout << ch << endl;//12345return 0;}
6.逆置字符数组(strrev)
#include<iostream>#include<string.h>//头文件using namespace std;int main(){//函数原型:char *strrev(char *s)char ch[7] = "abcdef";strrev(ch);cout << ch << endl;//fedcbareturn 0;}
以下代码来自: http://blog.csdn.net/turingo/article/details/8124432
strrev函数不常用,不过在进行数制转换和加密等场合还是有机会用到,因为一些针对嵌入式平台的编译器和VC对它提供了支持。对于不支持strrev函数的编译器,许多网友提供了不少很有价值的解决方案,不过直接从VC所提供的源代码中去提炼,似乎更能够兼顾效率和移植性,以下提供一份经典的实现代码:
- char* strrev(char* s)
- {
- /* h指向s的头部 */
- char* h = s;
- char* t = s;
- char ch;
- /* t指向s的尾部 */
- while(*t++){};
- t--; /* 与t++抵消 */
- t--; /* 回跳过结束符'\0' */
- /* 当h和t未重合时,交换它们所指向的字符 */
- while(h < t)
- {
- ch = *h;
- *h++ = *t; /* h向尾部移动 */
- *t-- = ch; /* t向头部移动 */
- }
- return(s);
- }
7.小写字母转大写(strupr)
#include<iostream>#include<string.h>//头文件using namespace std;int main(){char str[] = "abcdef";strupr(str);cout << str << endl;//ABCDEFreturn 0;}
- C++中对字符操作的函数集锦
- C中对堆的操作函数
- C语言中对字符数组的一些操作(字符数组分割)
- C语言中一些对文件操作的函数总结
- C语言中对字符串操作的函数
- c 字符操作函数
- c 字符操作函数
- C\C++中转义字符集锦
- MFC中对C中字符串操作函数的替代函数
- 对字符的操作
- c库函数对文件的操作函数
- C/C++中字符的基本操作
- Python 对字符元素操作的常见函数
- C-常用字符操作函数
- 字符/字符串操作函数(C)
- linux下面文件字符操作总结函数集锦
- C语言中对文件的操作
- C中对SQL Server的操作
- 深究递归和迭代的区别、联系、优缺点及实例对比
- 相机标定
- LCS-基础
- 自定义ViewGroup控件(二)----->流式布局进阶(二)
- Java调用系统默认程序打开本地文件
- C++中对字符操作的函数集锦
- edgesForExtendedLayout
- 【VR】Leap Motion 官网文档 ToolModel (工具模型)
- canvas动态彩虹
- Websphere 8.5静默安装升级
- 系统操作日志设计
- 银行取款机c++实现
- 关于JSP源码泄漏问题的总结分析
- 探索React生态圈