习题一:获取字符串长度
描述
- 键盘输入一个字符串,编写代码获取字符串的长度并输出,要求使用字符指针实现。
输入描述
- 键盘输入一个字符串
输出描述
- 输出字符串的长度
示例
输入: helloworld 输出: 10
解析
- 定义一个指针指向字符串开头。
- 只要指针对应元素不是’\n’,将指针后移,同时长度加1。
代码实现
#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'){ //长度加1,指针p后移 len++; p++; } cout<<len<<endl; return 0; }
习题二:复制部分字符串
描述
键盘输入一个长度为len(1 <= len < 30)的字符串,再输入一个正整数 m(1 <= m <= len),将此字符串中从第 m 个字符开始的剩余全部字符复制成为另一个字符串,并将这个新字符串输出。要求用指针处理字符串。
输入描述
- 键盘输入一个长度为len(1 <= len < 30)的字符串,再输入一个正整数 m(1 <= m <= len)
输出描述
- 输出复制的新字符串
示例
输入: helloworld 6 输出: world
解析
题目所给的代码中,输入的字符串是一个字符数组,采用getline函数输入,这样会在输入的末尾增加一个’\0’表示字符串的结束,如果长度小于数组长度,输入所有字符后加’\0’,如果长度大于数组长度,截断输入的前面部分再在最后加’\0’。
我们准备一个新串来保存复制后的字符串,因为原串大小不会超过30,因此新串的大小也不会超过30.
题目要求使用指针,我们可以用两个指针,指针p一开始指向原串的第m个位置,指针q一开始指向新串的起始位置。然后利用指针p遍历原串,到末尾的’\0’结束,遍历过程中像指针q指向的地址复制指针p指向元素的值,然后指针同步后移。
代码实现
#include <iostream> using namespace std; int main() { char str[30] = { 0 }; cin.getline(str, sizeof(str)); int m; cin >> m; // write your code here...... char copystr[30] = { 0 }; char* p = str + m - 1; //指向字符数组第m个元素 char* q = copystr; while(*p != '\0'){ //直到字符串结果 *q = *p; //复制 p++;; //两边指针都后移 q++; } cout << copystr << endl; return 0; }
习题三:编写函数实现两数交换(指针方式)
描述
- 键盘输入一个长度为len(1 <= len < 30)的字符串,再输入一个正整数 m(1 <= m <= len),将此字符串中从第 m 个字符开始的剩余全部字符复制成为另一个字符串,并将这个新字符串输出。要求用指针处理字符串。
输入描述
- 键盘输入2个整数 m 和 n
输出描述
- 输出交换后m 和 n 的值,中间使用空格隔开
示例
输入: 2 3 输出: 3 2
代码实现
using namespace std; // write your code here...... void swap(int *p, int *q); void swapp(int &a, int &b); int main() { int m, n; cin >> m; cin >> n; // write your code here...... // swap(m,n); // 指针变量 swapp(m,n); //引用变量 cout << m << " " << n << endl; return 0; } void swap(int *p, int *q) { int temp = *p; *p = *q; *q = temp; } void swapp(int &a, int &b) { int temp = a; a = b; b = temp; }
习题四:利用指针遍历数组
描述
- 键盘随机输入 6 个整数,将这些数据保存到数组中,利用指针遍历数组中的元素并打印。
输入描述
- 键盘随机输入 6 个整数
输出描述
- 输出数组中的所有元素,每个元素中间使用空格隔开
- 例如:10 20 30 40 50 60
示例
输入: 10 20 30 40 50 60 输出: 10 20 30 40 50 60
解析
- 利用指针遍历数组, 数组名就是数组第一个元素的地址
- 因此将地址范围知道,就可以访问每一个元素的值
- 这里的指针4个字节(64位的话8个字节)作为一整块
代码实现
#include <iostream> using namespace std; int main() { int arr[6] = { 0 }; int* ptr = arr; int len = sizeof(arr) / sizeof(int); for (int i = 0; i < len; i++) { cin >> arr[i]; } for (ptr ; ptr < arr + len ; ptr++) { cout << *ptr<< " "; } return 0; }
习题五:牛牛的新数组求和
描述
- 牛牛学习了指针相关的知识,想实现一个 int cal(int *array,int n) 的函数求出长度为 n 的数组的和。
输入描述
- 第一行输入一个正整数 n ,表示数组的长度
- 第二行输入 n 个正整数,表示数组中每个数字的值
输出描述
- 实现 int cal(int *array,int n) 求出数组array的和
示例
输入: 5 2 8 1 9 5 输出: 25
代码实现
#include <iostream> using namespace std; int cal(int *array,int n){ int *p = array; int sum=0; for(int i=0;i<n;i++){ sum+=*p; p++; } return sum; } int main(){ int n=0; cin>>n; int array[n]; for(int i=0;i<n;i++){ cin>>array[i]; } cout<<cal(array,n); return 0; }
习题六:牛牛的排序
描述
- 牛牛试图给一个长度为 n 整数数组排序,即实现一个 void sort(int *array,int n)
输入描述
- 第一行输入一个正整数 n ,表示数组长度。
- 第二行输入 n 个正整数,表示数组中每个元素的值
输出描述
- 输出排序后的数组
示例
输入: 5 2 9 8 1 3 输出: 1 2 3 8 9
代码实现
#include<stdio.h> void sort (int*arr,int n) //冒泡排序 { int i,j=0; for(i=0;i<n-1;i++) { for(j=0;j<n-1-i;j++) { if(arr[j]>arr[j+1]) { int tmp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=tmp; } } } for(i=0;i<n;i++) { printf("%d ",arr[i]); } } int main() { int n,i=0; scanf("%d",&n); int arr[100]={0}; for(i=0;i<n;i++) { scanf("%d",&arr[i]); } sort(arr,n); return 0; }
结束语
你想要的牛客都有,各种大厂面试真题在等你哦!快快通过下方链接注册加入刷题大军吧!
💬刷题神器,从基础到大厂面试题👉点击跳转刷题网站