111期_C++_2024年1月寒假作业博客_day04

文章讨论了C语言中指针的使用,包括数组指针的自增、字符串地址比较、strlen函数的工作原理以及字符串空格替换的两种思路。重点介绍了如何用C语言实现URL化,即替换字符串中的空格为%20,分析了两种方法的时间和空间复杂度。
摘要由CSDN通过智能技术生成

1 字符串数组,也可以理解为存放字符型指针的指针数组

        1.1 指针 += 1后地址的值改变多少只取决于指针解引用后能够访问的空间大小

上述代码中,循环开始前,p指向的是“stra”,之后p每次 ++,都能得到向后一个字符的地址

所以打印出来的应是 stra tra ra

2 数组指针自加1会得到跳过整个数组之后的地址的值

        p作为一个数组指针可以将这个一维数组按照矩阵的方式进行使用,

        

        p第一次解引用将得到一个指针变量,而且得到的这个指针访问的空间大小是一个整型,

        p第二次解引用将得到一个整型变量,其值为7

3 char str[9] = {0}; 中的str作为一个数组名,本质上仍旧是一个字符型的指针,

   自加一后得到的数组的地址加一个字节 

4 字符串相关知识

        4.1 两个字符串如果进行关系运算符的比较,实际上是在比较两个字符串地址的值的大小

        4.2 strlen不会把字符串中隐含的 \0 也算在占用的内存大小,所以不返回实际占用内存大小

        4.3 C语言本身没有提供对字符串进行整体操作的运算符

5 (走读代码即可)

6 在创建了一个临时数组要放新的内容时,可以在子函数调用前就创建临时数组

   再以数组名为形参传入子函数即可,这样子函数在定义的时候就不需要返回一个指针了

7 题目要求:

        URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间

        存放新增字符,并且知道字符串的“真实”长度。

   解题思路:

          思路一:直接建立一个数组来接收替换后的字符串,循环过程中利用双下标实现空格替换

          思路二:循环过程中每遍历到一个空格,就将空格后的所有字符都向后移动两个位置

        思路一的时间复杂度为o(N),空间复杂度为o(N)

        思路二的时间复杂度为o(N^2),空间复杂度为o(1),下面只展示思路二的代码

void URLformat(char* S, int subofi, int size)
{
	//0 123 45
	//0%20123 45
	//0%20123%2045
	int j = size - 1;
	while (j > subofi)
	{
		S[j + 2] = S[j];
		j--;
	}
	int i = subofi;
	S[i++] = '%';
	S[i++] = '2';
	S[i] = '0';
}

char* replaceSpaces(char* S, int length) 
{
	int countSpace = 0;
	int size = length;
	for (int i = 0; i < size; i++)
	{
		if (S[i] == ' ')
		{
			countSpace++;
			size = length + (countSpace - 1) * 2;
			URLformat(S, i, size);
			size += 2;
		}
	}
	if (size == length)
	{
		return S;
	}
	S[size] = '\0';
	return S;
}

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值