题目的主要信息:
- 输入一串字符串,给出字符串长度
- 要求使用字符指针来实现
具体做法:
题目所给的代码中,输入的字符串是一个字符数组,采用getline函数输入,这样会在输入的末尾增加一个'\0'表示字符串的结束,如果长度小于数组长度,输入所有字符后加'\0',如果长度大于数组长度,截断输入的前面部分再在最后加'\0'。
因此我们只要遍历字符串,找到末尾的'\0',统计前面出现了多少字符就可以了。
题目另一个要求是用字符指针实现,我们用一个字符指针指向字符数组,其实是指向了数组第一个元素的地址,用*p 就可以访问这个元素的值,因此我们遍历的时候用 *p与'\0'就可以比较是否到了字符串结尾,每次统计一个字符,并且指针通过自加后移一位。
#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;
}
复杂度分析:
- 时间复杂度:,为字符串长度,一次遍历
- 空间复杂度:,只申请了一个指针,常数空间