参考自c++primer plus
函数功能:输入一个字符串,返回值为一直字符指针,这个指针指向输入字符串的前n个字符。
第一种:
char * left1(const char *str,int n)
{
if(n<0)//异常处理
n=0;
char *p =new char [n+1];//开辟新的内存空间
int i;
for(i=0;i<n&&str[i];i++)
p[i]=str[i];
while(i<=n)
p[i++]='\0';
return p;
}
当执行left1("Hi!",32767)。这种方法将"Hi!"复制到由32768组成的数组中,并将除前3个字符之外的所有字符设置为空字符。比较浪费存储空间。
第二种:
char * left2(const char *str,int n)
{
if(n<0)
n=0;
int len=strlen(str);
n=(n<len)?n:len;
char *p =new char [n+1];
int i;
for(i=0;i<n&&str[i];i++)
p[i]=str[i];
while(i<=n)
p[i++]='\0';
return p;
}
这种方法确保new分配的空间不会多于存储字符串所需要的空间。但是该方法需要调用strlen(),因此程序更长,运行速度将降低,同时还必须包含头文件cstring,或string.h。
第三种:
char * left3(const char *str,int n)
{
int m=0;
while(m<n&&str[m])
m++;
char *p =new char [m+1];
int i;
for(i=0;i<m&&str[i];i++)
p[i]=str[i];
while(i<=m)
p[i++]='\0';
return p;
}
直接在函数中使用while循环,当m小于n(n为要取的字符串的前多少位),且str[m]不为‘\0’时,m++。
测试程序:
#include<iostream>
using namespace std;
const int ArSize=80;
int main()
{
using namespace std;
char sample[ArSize];
cout<<"Enter a string:\n";
cin.get(sample,ArSize);
cout<<"left1:\n";
char *ps1=left1(sample,4);
cout<<ps1<<endl;
delete []ps1;
cout<<"left2:\n";
char *ps2=left2(sample,4);
cout<<ps2<<endl;
delete []ps2;
cout<<"left3:\n";
char *ps3=left3(sample,4);
cout<<ps3<<endl;
delete []ps3;
}
当输入为空字符串时,取前四位字符串。
当输入字符串长度为2时,取前四个字符。
当输入字符串长度为10时,取前4个字符。