文章目录
- 1-12题
- 例题13
- 例题13答案
- 答案一
- 答案二
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 指针向前移动一位。