一、字符串截取前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]