字符串操作笔记

2015-10-14  本文已影响0人  无刻

一、字符串截取前n个字符

char src[] = "helloworld"
char dst[500];
int n;
strncpy_s(dst, src, n)

将字符串src的前n个字符复制到字符串dst中。且能保持dst的字符串长度为n而不是定义的500

二、复制字符串后n个字符到新字符串

char a[] = "helloworldhelowold";
char b[500];
int n = 5;
strcpy(b, a + (sizeof(a) - n - 1));
cout<<sizeof(a)<<endl;
cout<<b<<endl<<strlen(b);

输出为

19
owold
5

三、一种操作字符串长度的方法

来源:漫谈递归:字符串回文现象的递归判断
自定义函数时,如果其参数为数组,其实在函数内数组名退化成指针了,因此在函数内无法获得数组的长度。因此,一般采取的方法是:在main()函数内获得数组长度后,把长度也当作自定义函数的参数传入。假设定义的新函数,如文中例子里的函数,为is_palindereme(char *str, int n),其数组及其长度n = (int)strlen(str);同时作为函数的参数。
需要取字符串中的某一段时,采用is_palindereme(str+1, n-2)的方法即可,相当于数组的头和尾都去掉了。调整str加和n减的数即可获得不同位置不同长度的新数组。

四、由指针创建动态数组

一维:

char *p = new char[viriable];    //常规数组的大小只能用常量定义

二维

方式1:

char *array = new char[x * y];     //x行y列
char **array2; 
array2 = new char *[x]; 
for(int i = 0;i < x;++i)     //调用时直接array2[i][j]即可
array2[i] = array + i * y;    //需用作函数参数时:int function(char **str)

输入:

for(int i = 0; i < x; ++i)    //x为行数
{
    cin>>array2[i];    //回车输入下一行
}

方式2,由一维数组模拟二维数组:

char *array = new char[x * y];     //x行y列
*(array + i * y + j);    //调用array[i][j]
上一篇 下一篇

猜你喜欢

热点阅读