指定开始截取字符串

文章讨论了C++中处理字符串的方法,包括如何从一个字符串中复制从第m个字符开始的子串。提供了三种不同的代码实现,一种使用字符数组,一种直接输出,另一种利用substr函数。代码二和三在处理字符串时并未充分利用输入的n,而substr函数是用于从字符串中截取子串的便捷方式。
摘要由CSDN通过智能技术生成

描述

有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。

输入

数字n一行字符串数字m

输出

从m开始的子串

输入样例 1 

13
ABcd12##**fg
5

输出样例 1

12##**fg

输入样例 2 

6
abcdef
3

输出样例 2

cdef

代码一(如下):

#include <iostream>
#include <string>
using namespace std;
int main()
{
	char a[100];
	int n,m;
	cin >> n >> a >> m;
	char b[100];
	for (int i = 0; i <=n-m; i++)
	{
		b[i] = a[i + m-1 ];
	}
	for (int i = 0; i <= n-m; i++)
	{
		cout << b[i];
	}
	return 0;
}

代码二(如下):

#include <iostream>
#include <string>
using namespace std;
int main()
{
	string a;
	int n,m;
	cin >> n >> a >> m;
	for (int i = m-1; i <n ; i++)
	{
		cout << a[i];
	}
	return 0;
}

按理说采用如上代码是可以编译出正确答案,但是总感觉怪怪的,既然采用了string类型,那有什么必要输入n呢?直接采用a.size()岂不美哉?而且并没有执行题目中的复制成为另一个字符串这一过程而是直接输出了结果。

代码三(如下):substr函数

#include <iostream>
#include <string>
using namespace std;
int main()
{
	string a, b;
	int n, m;
	cin >> n >> a >> m;
	b = a.substr(m-1);
	cout << b;
	return 0;
}

这里虽然相较于代码二而言执行了题目中的复制成为另一个字符串这一过程,但是n还是相当于摆设一样,没有用上。

问题点:

①:可以用字符串常量来初始化字符数组。如:char str[ ]={"I am happy"};

也可以省略花括号,直接写成char str[ ]="I am happy";

不是用单个字符作为初值,而是用一个字符串作为初值。(数组str的长度不是10,而是11(因为字符串常量的最后由系统加上一个‘\0’))。

字符数组并不要求它的最后一个字符必须为‘\0’,甚至可以不包含‘\0’。如

char str[6]={'C','h','i','n','a'};       这样写也是完全合法的。

②:字符数组的输入输出可以有两种方法:1)逐个字符输入输出;2)将整个字符串一次输入或输出。例如:char str[20];cin>>str;cout<<str;

输出字符串时,cout流中用字符数组名,并不是用数组元素名。如

cout<<str;          //用字符数组名,输出一个字符串

cout<<str[4];       //用数组元素名,输出一个字符

③:如果数组长度大于字符串实际长度,输出遇‘\0’结束。

④:substr函数:substr函数格式 (俗称:字符截取函数)
  格式1: substr(string string, int a, int b);
  格式2:substr(string string, int a) ;

格式1:
    1、string 需要截取的字符串 
    2、a 截取字符串的开始位置
    3、b 要截取的字符串的长度

格式2:
    1、string 需要截取的字符串
    2、a 可以理解为从第a个字符开始截取后面所有的字符串。

该部分选自CSDN博文substr函数的使用_substr用法_大头博客的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值