牛客网C语言刷题(指针篇)

Posted 嵌入式基地

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客网C语言刷题(指针篇)相关的知识,希望对你有一定的参考价值。

✅作者简介:大家好我是:嵌入式基地,是一名嵌入式工程师,希望一起努力,一起进步!
📃个人主页:嵌入式基地
🔥系列专栏:牛客网C语言刷题专栏
💬推荐一款模拟面试、刷题神器,从基础到大厂面试题👉点击跳转刷题网站进行注册学习


牛客网C语言刷题(指针篇)

习题一:获取字符串长度

描述

  • 键盘输入一个字符串,编写代码获取字符串的长度并输出,要求使用字符指针实现。

输入描述

  • 键盘输入一个字符串

输出描述

  • 输出字符串的长度

示例

输入:
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;


结束语

你想要的牛客都有,各种大厂面试真题在等你哦!快快通过下方链接注册加入刷题大军吧!
💬刷题神器,从基础到大厂面试题👉点击跳转刷题网站

以上是关于牛客网C语言刷题(指针篇)的主要内容,如果未能解决你的问题,请参考以下文章

牛客网C语言刷题

C语言之牛客网刷题笔记 点进来保证让知识充实你一整天

牛客网刷题小结---C语言---有序序列(详解)

Python快速刷题网站——牛客网 数据分析篇

牛客网刷题ACM模式 Objc Swift

Python牛客网刷题-Day1