117.info
人生若只如初见

C语言实现字符串逆序的技巧是什么

在C语言中,实现字符串逆序的技巧主要包括以下几点:

  1. 使用双指针法:创建两个指针,一个指向字符串的起始位置,另一个指向字符串的结束位置。然后交换这两个指针所指向的字符,并将起始位置的指针向后移动一位,结束位置的指针向前移动一位,直到两个指针相遇或者错过彼此。
#include
#include

void reverse_string(char *str) {
    int len = strlen(str);
    char temp;
    for (int i = 0, j = len - 1; i < j; i++, j--) {
        temp = str[i];
        str[i] = str[j];
        str[j] = temp;
    }
}

int main() {
    char str[] = "Hello, World!";
    printf("Original string: %s\n", str);
    reverse_string(str);
    printf("Reversed string: %s\n", str);
    return 0;
}
  1. 使用递归:如果你喜欢使用递归方法,可以通过递归地反转子字符串来实现字符串逆序。
#include
#include

void reverse_substring(char *start, char *end) {
    if (start >= end) {
        return;
    }
    char temp = *start;
    *start = *end;
    *end = temp;
    reverse_substring(start + 1, end - 1);
}

void reverse_string(char *str) {
    int len = strlen(str);
    reverse_substring(str, str + len - 1);
}

int main() {
    char str[] = "Hello, World!";
    printf("Original string: %s\n", str);
    reverse_string(str);
    printf("Reversed string: %s\n", str);
    return 0;
}
  1. 使用栈:将字符串的字符依次入栈,然后从栈中依次出栈并赋值给原字符串,这样就实现了字符串逆序。
#include
#include
#include 

typedef struct Stack {
    int top;
    unsigned capacity;
    char *array;
} Stack;

Stack *create_stack(unsigned capacity) {
    Stack *stack = (Stack *)malloc(sizeof(Stack));
    stack->capacity = capacity;
    stack->top = -1;
    stack->array = (char *)malloc(stack->capacity * sizeof(char));
    return stack;
}

int is_full(Stack *stack) {
    return stack->top == stack->capacity - 1;
}

int is_empty(Stack *stack) {
    return stack->top == -1;
}

void push(Stack *stack, char item) {
    if (is_full(stack)) {
        return;
    }
    stack->array[++stack->top] = item;
}

char pop(Stack *stack) {
    if (is_empty(stack)) {
        return '\0';
    }
    return stack->array[stack->top--];
}

void reverse_string(char *str) {
    int len = strlen(str);
    Stack *stack = create_stack(len);
    for (int i = 0; i < len; i++) {
        push(stack, str[i]);
    }
    for (int i = 0; i < len; i++) {
        str[i] = pop(stack);
    }
}

int main() {
    char str[] = "Hello, World!";
    printf("Original string: %s\n", str);
    reverse_string(str);
    printf("Reversed string: %s\n", str);
    return 0;
}

这些技巧都可以实现字符串逆序,你可以根据自己的需求和喜好选择合适的方法。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fed44AzsBBA5fDA.html

推荐文章

  • c语言goto用法是什么

    在C语言中,goto语句用于从一个位置跳转到另一个位置。它可以用于跳出循环、条件语句或者函数。goto语句的语法如下:
    goto label;
    ...
    label: //...

  • goto在c语言中的运用方法是什么

    goto 语句在 C 语言中允许程序从一个位置跳转到另一个位置。然而,在实际编程中,过度使用 goto 语句通常被认为是一种不好的编程实践,因为它可能导致代码结构混...

  • c语言堆和栈的区别是什么

    C语言中的堆和栈是两种不同的内存分配方式。 栈(Stack):栈是由编译器自动分配和释放的内存区域,用于存储局部变量和函数调用的上下文信息。栈的特点是先进后出...

  • C语言结构体数组怎么定义和使用

    在C语言中,可以通过定义结构体数组来存储多个具有相同数据类型的结构体对象。下面是定义和使用结构体数组的示例代码:
    #include // 定义一个结构体类型

  • C语言中数组逆序排列的方法有哪些

    在C语言中,数组逆序排列可以通过以下几种方法实现: 双指针法:
    使用两个指针,一个指向数组的起始位置,另一个指向数组的末尾位置。然后交换这两个指针所...

  • volatile关键字在实时系统中的应用案例

    在实时系统中,volatile关键字主要用于确保共享变量的可见性和禁止指令重排序,从而保证多线程环境下的数据一致性和程序的正确执行。以下是volatile关键字在实时...

  • C语言中如何避免滥用volatile关键字

    在C语言中,volatile关键字用于告诉编译器不要对被修饰的变量进行优化 确保你了解volatile的作用:volatile关键字主要用于多线程或者中断服务程序中,防止编译器...

  • volatile关键字在不同平台上的行为是否一致

    volatile关键字在不同平台上的行为是一致的。这是因为Java内存模型(JMM)定义了volatile关键字的规范,它屏蔽了底层硬件和编译器的差异,为Java程序员提供了一个...