C语言编写函数将字符串逆序存放

1-12题

C语言基础例题1-3题-指针篇
C语言基础例题4-5题-二维数组篇
C语言基础例题6-7题-结构体篇
C语言基础例题8-9题-大作业篇
C语言基础例题10-11题-字符串、指针篇
C语言基础例题12题-链表篇

例题13

请编写一个函数 void reverseString(char* str),该函数将输入的字符串逆序存放,不要使用除stdio以外的任何库函数。

例如,对于输入字符串 “Hello, World!”,函数逆序结果后,str应为 “!dlroW ,olleH”。

测试用例

#include <stdio.h>

void reverseString(char* str);

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

预期输出:
Original string: Hello, World!
Reversed string: !dlroW ,olleH

例题13答案

答案一

#include <stdio.h>

void reverseString(char *str);

int main()
{
    
    
    char str[] = "Hello, World!";
    printf("Original string: %s\n", str);
    reverseString(str);
    printf("Reversed string: %s\n", str);
    return 0;
}
void reverseString(char *str)
{
    
    
    char *first=str,*last=str,temp;
    while(*last)
        *last++;
    while(first!=(--last))
    {
    
    
        temp=*first;
        *first=*last;
        *last=temp;
        first++;
    }
}

char *first = str, *last = str, temp;:
定义了两个指针 first 和 last,分别指向字符串的开头和结尾,还有一个变量 temp 用于交换字符。

while (*last):
通过循环,使指针 last 移动到字符串的结尾部分,即指向字符串的末尾的空字符 ‘\0’。

while (first != (–last)):
开始一个循环,条件是 first 指针没有达到 last 指针,也就是还没有达到字符串的中点。

temp = *first;
*first = *last;
*last = temp;:
将 first 指针指向的字符与 last 指针指向的字符进行交换。交换后,first 指针向后移动,last 指针向前移动。

first++;:
将 first 指针向后移动一位,继续下一次循环。

通过以上操作,完成了字符串的反转。

答案二

#include <stdio.h>

void reverseString(char *str);

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

void reverseString(char *str)
{
    
    
    int length = 0;
    char *tempPtr;
    char temp;

    // 计算字符串的长度
    tempPtr = str;
    while (*tempPtr != '\0')
    {
    
    
        length++;
        tempPtr++;
    }

    // 交换字符串字符
    tempPtr = str;
    char *endPtr = str + length - 1;
    while (tempPtr < endPtr)
    {
    
    
        temp = *tempPtr;
        *tempPtr = *endPtr;
        *endPtr = temp;
        tempPtr++;
        endPtr--;
    }
}

int length = 0;:
定义一个变量 length,用于记录字符串的长度。

char *tempPtr;:
定义一个指针 tempPtr,用于遍历字符串。

char temp;:
定义一个变量 temp,用于交换字符。

tempPtr = str;:
将指针 tempPtr 指向字符串的开头,准备遍历字符串并计算长度。

while (*tempPtr != ‘\0’):
通过循环,遍历字符串直到遇到空字符 ‘\0’,即字符串的结尾。

length++;
tempPtr++;:

对于每个非空字符,将 length 的值增加 1,并将 tempPtr 指针向后移动到下一个字符。

tempPtr = str;:
将 tempPtr 指针重新指向字符串的开头,准备进行字符交换操作。

char *endPtr = str + length - 1;:
定义一个指针 endPtr,指向字符串的最后一个字符。

while (tempPtr < endPtr):
通过循环,进行字符交换操作。每次循环中,交换 tempPtr 指针和 endPtr 指针指向的字符,并将两个指针分别向后和向前移动一位。

temp = *tempPtr;
*tempPtr = *endPtr;
*endPtr = temp;:
交换 tempPtr 指针和 endPtr 指针指向的字符。

tempPtr++; endPtr–;:
将 tempPtr 指针向后移动一位,将 endPtr 指针向前移动一位。

猜你喜欢

转载自blog.csdn.net/weixin_44499065/article/details/134346915