【重拾C语言】七、指针(三)指针与字符串(字符串与字符串数组;指针与字符串的遍历、拷贝、比较;反转字符串)

2024-07-30 08:51:38 浏览数 (1)

前言

  • 指针是一个变量,其存储的值是内存地址。通过指针,可以直接访问和操作内存中的数据。指针通常用于在程序中动态地分配内存、传递函数参数、实现数据结构等方面。
  • 字符串是由字符组成的一串数据。在C语言中,字符串以null字符('')结尾,表示字符串的结束。字符串可以通过字符数组或指针来表示和操作。使用指针可以更灵活地处理字符串,因为指针可以指向字符串的起始位置,并通过指针运算来访问字符串中的字符。
    • 使用指针来遍历字符串中的字符;
    • 使用指针进行字符串的拷贝、连接和比较等操作;
    • 指针还可以用于动态分配内存以存储字符串,这样可以根据需要调整字符串的长度。

七、指针

7.1~3 指针与变量、指针操作、指向指针的指针

【重拾C语言】七、指针(一)指针与变量、指针操作、指向指针的指针-CSDN博客https://blog.csdn.net/m0_63834988/article/details/133690334?spm=1001.2014.3001.5501

https://blog.csdn.net/m0_63834988/article/details/133690334?spm=1001.2014.3001.5501

7.4 指针与数组

【重拾C语言】七、指针(二)指针与数组(用指针标识数组、多维数组与指针、数组指针与指针数组)-CSDN博客

https://blog.csdn.net/m0_63834988/article/details/133753904?spm=1001.2014.3001.5501

7.5 指针与字符串

7.5.1 字符串与字符串数组
a. 字符串

C语言中没有特定的字符串类型,通常是将字符串放在一个字符数组中。字符串实际上是由一系列字符组成的,以空字符('')作为结束标志。可以通过声明字符数组来创建字符串,并使用数组中的元素来存储字符串的每个字符。

创建一个长度为20的字符数组 str,并将字符串 "Hello, world!" 存储在数组中:

代码语言:javascript复制
char str[20] = "Hello, world!";

(注意:需要确保数组的长度足够大,以容纳字符串及其结束标志)

字符串:

字符串常量

代码语言:javascript复制
printf(“%dn”,m); 
printf(“Hello world”);

字符串变量

代码语言:javascript复制
char str[10];
strcpy(str,“hello”); 
b. 字符串数组

使用字符数组的方式来声明和初始化一个字符串数组,其中每个元素都是一个字符串:

代码语言:javascript复制
char strings[][20] = {
    "Hello",
    "World",
    "C programming"
};

上述代码中,strings 是一个包含三个字符串的数组。每个字符串可以具有不同的长度(数组的每个元素都需要足够大,以容纳对应的字符串及其结束标志)。

注意:字符串数组中的每个字符串都以空字符结尾。在使用字符串数组时,需要注意字符串的结束位置

7.5.2 指针与字符串

通过使用指针,可以更加灵活地操作和处理字符串。指针的优势在于可以直接访问字符串中的字符,而不需要通过数组索引来访问。

a. 字符串指针的声明和初始化
代码语言:javascript复制
char *strPtr; // 声明一个字符指针
char *strPtr = "Hello"; // 初始化一个指向字符串常量的指针

可以声明一个字符指针 strPtr,然后将其初始化为指向字符串常量 "Hello" 的起始位置。字符串常量是以字符数组的形式存储的,因此可以使用指针来访问其中的字符。

b. 指针与字符串的遍历

使用指针可以遍历字符串中的每个字符。

代码语言:javascript复制
char *strPtr = "Hello";
while (*strPtr != '') {
    printf("%c", *strPtr);
    strPtr  ; // 指针递增,指向下一个字符
}

在上述示例中,通过检查指针所指向的字符是否为结束标志 '',循环逐个打印字符串中的字符,并通过递增指针来访问下一个字符。

c. 字符串的拷贝
代码语言:javascript复制
char source[] = "Hello";
char destination[10];
char *srcPtr = source;
char *destPtr = destination;
while (*srcPtr != '') {
    *destPtr = *srcPtr;
    srcPtr  ;
    destPtr  ;
}
*destPtr = ''; // 在目标字符串末尾添加结束标志

通过逐个复制源字符串中的字符到目标字符串,并递增源指针和目标指针,最后在目标字符串末尾添加结束标志 '',完成字符串拷贝。

d. 字符串的比较
代码语言:javascript复制
char *str1 = "Hello";
char *str2 = "Hello";
if (strcmp(str1, str2) == 0) {
    printf("字符串相等n");
} else {
    printf("字符串不相等n");
}

使用 strcmp 函数比较两个字符串是否相等,函数返回值为0表示字符串相等。

7.5.3 反转字符串
代码语言:javascript复制
#include <stdio.h>
#include <string.h>

void reverseString(char* str) {
    int length = strlen(str);

    // 使用两个指针,一个指向字符串起始位置,一个指向字符串末尾
    char* start = str;
    char* end = str   length - 1;

    // 交换指针所指向的字符,并向中间移动指针,直到两个指针相遇
    while (start < end) {
        char temp = *start;
        *start = *end;
        *end = temp;

        start  ;
        end--;
    }
}

int main() {
    char str[] = "Hello, World!";
    printf("原始字符串: %sn", str);

    reverseString(str);

    printf("反转后的字符串: %sn", str);

    return 0;
}

​​​​​​​

  • reverseString 函数接受一个指向字符串的指针,并使用两个指针 startend 分别指向字符串的起始位置和末尾位置。通过交换两个指针所指向的字符,并向中间移动指针,可以实现字符串的反转操作。
  • main 函数中,声明一个字符串 str,并将其作为参数传递给 reverseString 函数。然后打印出反转后的字符串。

关于指针作参数,详见后文:九、再论函数

0 人点赞