您的位置:首页 > 编程语言 > C语言/C++

C++中对字符操作的函数集锦

2015-08-10 13:11 549 查看
下面是要讲解的目录:

/*
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 string
str2: Sample string
str3: 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;//12345
return 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;//fedcba
return 0;
}


以下代码来自: http://blog.csdn.net/turingo/article/details/8124432
strrev函数不常用,不过在进行数制转换和加密等场合还是有机会用到,因为一些针对嵌入式平台的编译器和VC对它提供了支持。对于不支持strrev函数的编译器,许多网友提供了不少很有价值的解决方案,不过直接从VC所提供的源代码中去提炼,似乎更能够兼顾效率和移植性,以下提供一份经典的实现代码:

[cpp] view
plaincopy

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;//ABCDEF
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: