题目的主要信息:

  • 输入一串字符串,给出字符串长度
  • 要求使用字符指针来实现

具体做法:

题目所给的代码中,输入的字符串是一个字符数组,采用getline函数输入,这样会在输入的末尾增加一个'\0'表示字符串的结束,如果长度小于数组长度,输入所有字符后加'\0',如果长度大于数组长度,截断输入的前面部分再在最后加'\0'。

因此我们只要遍历字符串,找到末尾的'\0',统计前面出现了多少字符就可以了。

题目另一个要求是用字符指针实现,我们用一个字符指针指向字符数组,其实是指向了数组第一个元素的地址,用*p 就可以访问这个元素的值,因此我们遍历的时候用 *p与'\0'就可以比较是否到了字符串结尾,每次统计一个字符,并且指针通过自加后移一位。

alt

#include <iostream>
using namespace std;

int main() {

	char str[100] = { 0 };
	cin.getline(str, sizeof(str));
    int len = 0; //记录字符串长度
    char* p = str;
    while(*p != '\0'){ //找到为'\0'为止
        len++; //长度增加
        p++; //指针向后
    }
    cout << len << endl;
	return 0;
}

复杂度分析:

  • 时间复杂度:O(n)O(n)nn为字符串长度,一次遍历
  • 空间复杂度:O(1)O(1),只申请了一个指针,常数空间