【寒假小练】day2

news2024/12/25 3:24:37

前言

日积跬步,能至千里。

水平有限,不足之处望请斧正。


选择题

1、以下程序运行后的输出结果是( )

#include <stdio.h>
void fun(char **p) {
		int i;
		for(i = 0; i < 4; i++) {
				printf("%s", p[i]); 
    }
int main() {
		char *s[6] = {"ABCD", "EFGH", "IJKL", "MNOP", "QRST", "UVWX"}; 
  	fun(s);
		printf("\n");
		return 0;
}

A:ABCDEFGHIJKL

B:ABCD

C:AEIM

D:ABCDEFGHIJKLMNOP


char *s[6]

s是字符指针数组,每个元素是char*

"ABCD", "EFGH"等都是字符串常量,会被看作char*的指针,存放在常量区。

fun(s)

数组传参时降维成指向其首元素的指针,即char**

fun内的p[i]会拿到s[0], s[1], ..., s[3],即"ABCD", "EFGH", "IJKL", "MNOP"的地址。按%s的格式打印。

正确答案:D


#字符串常量(字符串字面量)

int main()
{
    char* str;
    
    str = "a string";
    
    printf("%s\n", str);
    
    return 0;
}
  • str:字符指针,存于栈区
  • "a string":字符串常量,存于常量区

用一双引号括起来的一串字符序列,在C语言中被看作 字符串常量

C语言会将字符串常量看作只读的字符数组,所以它也是char*的指针。如,

printf("%s\n", "test");

调用printf时,会传递"test"的地址,即常量区中存储字符t的内存单元的地址。


2、数组 a 的定义为: int a[3][4]; 下面哪个不能表示 a[1][1] ( )

A:*(&a[0][0]+5)

B:*(*(a+1)+1)

C:*(&a[1]+1)

D:*(a[1]+1)


int a[3][4]

在这里插入图片描述

a是整个数组(int [3][4])的数组名,a = &a[0],类型为int (*)[4]

a[0]是第0行(int [4])的数组名,a[0] = &a[0][0],类型为int*


A:&a[0][0] == a[0]a[0]类型为int*,又因为数组是连续存储,所以*(a[0] + 5) == a[1][1]。可以表示。

B:a = &a[0],类型为int (*)[4]&a[0] + 1 = &a[1]*(&a[1]) == a[1]

a[1] = &a[1][0],类型为int*&a[1][0] + 1 == &a[1][1]*(&a[1][1]) == a[1][1]。可以表示。

C:&a[1] = a + 1,类型为int (*)[4]&a[1] + 1 == &a[2]*(&a[2]) == a[2]。无法表示。

D:a[1] = &a[1][0],类型为int*&a[1][0] + 1 == &a[1][1]*(&a[1][1]) == a[1][1],可以表示。

正确答案:C


总结

数组名是首元素地址,如对于二维数组int a[3][4]

  • a = &a[0]
  • a[0] = &a[0][0]

3、void (*s[5])(int)表示意思为( )

A:函数指针

B:函数指针数组

C:数组指针函数

D:语法错误


老方法:通过优先级判断名字和谁结合,要么是数组,要么是指针,剩下的就是数组元素类型或指针指向的数据类型。

优先级:[] > *

s和[5]结合,代表这是数组。剩下的void (*)(int)代表数组的元素是无返回值、有一个int参数的函数指针。所以这是函数指针数组。

正确答案:B


总结
通过优先级判断名字和谁结合,要么是数组,要么是指针,剩下的就是数组元素类型或指针指向的数据类型。


4、在64位操作系统上,下面程序返回结果是( )

int main() {
		int *k[10][30]; 
  	printf("%d\n", sizeof(k)); 
  	return 0;
}

A:4

B:8

C:1200

D:2400


64位操作系统,内存单元的编号有64位二进制数来描述,所以指针的大小为64bits == 8bytes300 * 8 = 2400

正确答案:D


总结

指针大小:32位下4bytes,64位下8bytes


5、假设函数原型和变量说明如下,则调用合法的是( )

void f(int **p);

int a[4]={1,2,3,4};
int b[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 
int *q[3]={b[0],b[1],b[2]};

A:f(a);

B:f(b);

C:f(q);

D:f(&a);


f需要int**类型的参数。

A:a = &a[0],类型为int *。不符合。

B:b = &b[0],类型为int (*)[4]。不符合。

C:q = &q[0],类型为int **。符合。

D:&aa的地址,类型为int (*)[4]。不符合。


总结

数组名是首元素地址,两个例外:

  • &数组名取整个数组的地址
  • sizeof(数组名):计算整个数组的大小

编程题

1. 第一个只出现一次的字符

描述

在一个长为 n 字符串中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)

数据范围:100000≤n≤10000,且字符串只有字母组成。

要求:空间复杂度 O(n),时间复杂度O(n)

示例1

输入:

"google"

返回值:

4

示例2

输入:

"aa"

返回值:

-1

思路

出现次数……这不就是我们之前提过的hash映射的思想嘛:构建哈希表,统计每个字符出现次数,最后再次遍历,第一个出现次数为1的就是要找的。


参考代码

class Solution {
public:
    int FirstNotRepeatingChar(string str) {
        vector<int> hash(128);

        for(auto e : str)
        {
            ++hash[e];
        }
        for(size_t i = 0; i < str.size(); ++i)
        {
            if(hash[str[i]] == 1) return i;
        }

        return -1;
    }
};

2. 判定字符是否唯一

实现一个算法,确定一个字符串 s 的所有字符是否全都不同。

示例 1:

输入: s = "leetcode"
输出: false 

示例 2:

输入: s = "abc"
输出: true

限制:

  • 0 <= len(s) <= 100
  • s[i]仅包含小写字母

思路

同样的hash思想也能解决:某个字符出现了两次就代表有相同的字符。


参考代码

class Solution {
public:
    bool isUnique(string astr) {
        vector<int> hash(128);

        for(auto e : astr)
        {
            ++hash[e];
            if(hash[e] > 1) return false;
        }
        
        return true;
    }
};

总结

查找还得hash


#字符串常量


今天的分享就到这里了

这里是培根的blog,期待与你共同进步!

下期见~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/183202.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python 本地django外部网络访问

目录 一、前提 1、确定在本地可以访问 二、 本地django项目外部网络访问 1、在settings中配置允许所有服务器访问&#xff08;局域网访问&#xff09; 2、Host配置 3、使用内网穿透工具&#xff08;ngrok&#xff09;&#xff08;外部网络访问&#xff09; &#xff08;…

Acwing---1224. 交换瓶子

交换瓶子1.题目2.基本思想3.代码实现1.题目 有 N 个瓶子&#xff0c;编号 1∼N&#xff0c;放在架子上。 比如有 5个瓶子&#xff1a; 2 1 3 5 4 要求每次拿起 2 个瓶子&#xff0c;交换它们的位置。 经过若干次后&#xff0c;使得瓶子的序号为&#xff1a; 1 2 3 4 5 对于这…

【第26天】SQL进阶-查询优化- performance_schema系列实战二:锁问题排查(MDL锁)(SQL 小虚竹)

回城传送–》《32天SQL筑基》 文章目录零、前言一、什么是MDL锁二、什么时候适合加MDL锁三、 实战演练3.1 数据准备&#xff08;如果已有数据可跳过此操作&#xff09;3.2 开启第一个会话&#xff0c;显式开启一个事务&#xff0c;并执行一个update语句不提交3.3 开启第二个会话…

机器自动翻译古文拼音 - 十大宋词 - 水调歌头 明月几时有 苏轼

水调歌头明月几时有 北宋苏轼 明月几时有&#xff0c;把酒问青天。 不知天上宫阙&#xff0c;今夕是何年。 我欲乘风归去&#xff0c;又恐琼楼玉宇&#xff0c;高处不胜寒。 起舞弄清影&#xff0c;何似在人间&#xff1f; 转朱阁&#xff0c;低绮户&#xff0c;照无眠。 不应…

idea 配置tomcat 运行jsp项目

1、复用idea打开jsp项目 2、添加tomcat配置 3、点击后会出现配置框,这里画框的地方都选上&#xff0c;版本选择1.8&#xff0c;其他的信息内容默认后&#xff0c;点击确认 4、点击 File->Project Structure,弹出界面选择Project&#xff0c;这里sdk选择1.8&#xff0c;语言选…

#7反转链表#

反转链表 1题目链接 链接 2思路 思路1(暴力): 定义两个指针或者三个指针 这里选择三个指针 清晰一点 头部 头部的下一个 头部的下一个的下一个 n1 n2 n3 做好n2和n1的连接: n2->nextn1 然后: n2n1 n3n2 n3n3->next 相当于三个指针都往…

JAVA混合使用函数式接口(BiPredicate和Consumer)、泛型、lambda表达式、stream流,优化List求交集和差集后的通用处理

文章目录前言项目场景两个List求交集和差集BiPredicate和Consumer基本介绍优化目标一步步优化代码最后前言 本文主要讲的是一个小的功能代码的优化案例&#xff0c;用到的知识点主要包括函数式接口&#xff08;BiPredicate和Consumer&#xff09;、泛型、lambda表达式、stream…

100天精通Python(数据分析篇)——第73天:Pandas文本数据处理方法之查找、替换、拼接、正则、虚拟变量

文章目录每篇前言一、Python字符串内置方法1. 文本查找2. 文本替换3. 文本拼接4. 正则提取二、Pandas实现文本查找1. str.startswith(字符串)2. str.endswith(字符串)3. str.index(字符串, start0, endlen(string))4. str.rindex(字符串, start0, endlen(string))5. str.find(字…

工具技巧和读文档 | 读函数式编程接口文档 | 匿名内部类 | lambda表达式 |IDEA

Function接口&#xff0c;函数式接口 按入参返回值分类&#xff0c;大概分为4种类型&#xff0c;再加上多个入参就又多了Bi开头的两种。 有CtrlP的时候不懂参数列表该写啥&#xff0c;就先CtrlALT看下入参类型的相关实现类&#xff01; 一些实用的快捷键&#xff1a;Ctrl P看参…

AORT:一款功能强大的多合一网络侦查与数据收集工具

关于AORT AORT是一款功能强大的多合一网络侦查与数据收集工具&#xff0c;该工具的主要目的是帮助漏洞Hunter和渗透测试人员完成网络侦查环节的各类任务。AORT基于Python开发&#xff0c;使用起来非常简单且方便&#xff0c;并且支持跨平台&#xff08;只要安装了Python 3即可…

怒删虚拟机,FPGA开发新宠-几步在Windows上安装桌面化Linux

Linux上运行Vivado这类EDA工具要比Window上快很多&#xff0c;大概就是优化的问题&#xff0c;所以选择Linux上开发是一个比较好的选择&#xff08;主要是免费&#xff09;。国内习惯了Win系统&#xff0c;所以用Linux比较少&#xff0c;那么有没有既可以在Windows上做一些文档…

Python爬虫(4)-Selenium模拟鼠标操作

在Selenium4.2以后的版本里面鼠标的操作方法都封装在了ActionChains中需要时直接取即可。 1.鼠标双击 使用方法就是调用ActionChains然后传入你需要点击的按钮的位置即可 ActionChains(driver).double_click(f1).perform() perform()的意思就是执行所有ActionChains中的动作 …

python字典应用

python字典应用 文章目录python字典应用一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤字典的综合案例使用collections模块的defaultdict类来实现创建字典。拓展知识一&#xff1a;内置函数globals()和locals()拓展知识二&#xff1a;有序字典 collections.Ord…

如何使用MyBatis简化JDBC开发?MyBatis持久层框架快速入门

文章目录1. 前言2. JDBC 存在的缺点3. MyBatis 优化4. MyBatis 快速入门5. 总结Java编程基础教程系列1. 前言 JavaEE 企业级 Java 项目中的经典三层架构为表现层&#xff0c;业务层和持久层&#xff0c;使用Java 代码操作数据库属于持久层内容&#xff0c;而 MyBatis 对 JDBC …

Multus k8s网络浅谈

Multus是什么 k8s不提供网络解决方案&#xff0c;提供CNI ( Container Networking Interface )规范&#xff0c;被CNI插件遵守&#xff08;Flannel, Calico&#xff0c;Multus等&#xff0c;这些是网络方案&#xff09; Multus 提供了将多个接口添加到pod的功能 Flannel 为每…

实现自己的数据库三

一 前言上篇实现了数据库的持久化&#xff0c;就是一个质的飞跃&#xff0c;虽然代码不复杂&#xff0c;但是对没有这方面经验者来说&#xff0c;还是意思的&#xff0c;下一步就是要完成另外一个飞跃&#xff0c;将存储的数据结构采用B树的形式来保存。在改造之前&#xff0c;…

为什么要设计非公平锁?

背景 公平&#xff1a;排队 非公平&#xff1a;在合适时机插队 非公平还是 ReentrantLock 的默认策略&#xff0c;排队时间不浪费了&#xff1f; 场景 来看这种场景 假如A持有一把锁&#xff0c;B请求这把锁&#xff0c;这时候B被挂起进入阻塞&#xff0c;A释放锁的时候&a…

点与线段的关系

点与线段的关系 对于向量a(x1,y1)和b(x2,y2) 点乘的数学意义&#xff1a;a * b x1x2 y1y2 点乘的几何意义&#xff1a;a * b |a||b|cosQ 这个可以看成是投影关系表达式&#xff1a;cosQ a * b / ( |a||b|) 令r cosQ&#xff1b; 求p点和线段AB的位置关系&#xff0c;可以…

将字符串根据指定的分隔符拆分为元组str.partition()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 将字符串根据指定的分隔符拆分为元组 str.partition() 选择题 对于以下python代码最后输出的结果是? string "I Love Python" print("【显示】string.partition(Love)"…

Unity3d 微信小程序(小游戏)项目实现流量主接入功能(含源码)

前言 很早之前编写了Unity导出微信小游戏的博客&#xff0c;也尝试自己做了个Demo上线了&#xff0c;基本没更新过&#xff0c;不过几个月的时间&#xff0c;用户超过了一千&#xff0c;可以开通流量主了&#xff0c;大概率是因为上篇的帖子浏览量大了&#xff0c;扫码体验的人…