题意整理。
- 键盘输入一个字符串以及一个正整数m。
- 将原字符串第m个字符开始的所有字符复制到一个新字符串,输出新字符串,要求使用指针实现。
方法一(指针)
1.解题思路
- 定义一个指针p指向原字符串第m个字符,指针q指向新字符串第0个字符。
- 从第m个元素开始,遍历原字符串。将p指针指向元素赋值给q指针,同时让p、q指针后移。
动图展示:
2.代码实现
#include <iostream>
using namespace std;
int main() {
char str[30] = { 0 };
cin.getline(str, sizeof(str));
int m;
cin >> m;
//用于存放复制的字符串
char copystr[30]={0};
//p指针指向原字符串第m个字符
char *p=str+m-1;
//q指针指向新字符串第0个字符
char *q=copystr;
while(*p!='\0'){
//将p指针指向元素赋值给q指针
*q=*p;
//p指针、q指针后移
*p++;
*q++;
}
cout<<copystr<<endl;
return 0;
}
3.复杂度分析
- 时间复杂度:假设字符串的长度位n,循环总共执行n-m+1次,所以时间复杂度为。
- 空间复杂度:需要额外常数级别的空间,所以空间复杂度为。