返回一个字符串的前n位字符

本文介绍了三种使用C++截取字符串的方法,包括异常处理、内存分配优化及循环利用等技巧,对比了不同方法的优缺点,如空间效率与运行速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考自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个字符。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值