题意整理。

  • 键盘输入一个字符串以及一个正整数m。
  • 将原字符串第m个字符开始的所有字符复制到一个新字符串,输出新字符串,要求使用指针实现。

方法一(指针)

1.解题思路

  • 定义一个指针p指向原字符串第m个字符,指针q指向新字符串第0个字符。
  • 从第m个元素开始,遍历原字符串。将p指针指向元素赋值给q指针,同时让p、q指针后移。

动图展示: alt

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次,所以时间复杂度为O(nm)O(n-m)
  • 空间复杂度:需要额外常数级别的空间,所以空间复杂度为O(1)O(1)