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;
}