C 交换数组中的元素

xiaoxiao2021-02-28  72

1.题目

有一个字符数组的内容为:”student a am i”,请你将数组的内容改为”i am a student”. 要求:不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。

2.程序代码

#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <Windows.h> #include <assert.h> int my_strlen(const char *str)//定义函数,求出数组的长度 { assert(str != NULL);//assert为断言,如果表达式为假,整个程序退出,并输出错误信息, //若表达式为真,则继续执行后面的程序 int count = 0; while (* str++ != '\0')//如果*str不为'\0',则str向后移一位 { count++; } return count; } void reverse(char *left, char *right)//定义函数,让数组中的元素逆置 { assert(left != NULL); assert(right != NULL); char mid = '0'; while (left <=right) { mid = *left; *left = *right; *right = mid; left++; right--; } } void change_arr(char *str)//定义函数,用来交换数组中的元素 { assert(str != NULL); int ret = my_strlen(str);//交换整个数组 reverse(str, str + ret - 1); char *left = NULL;//交换每个单词 char *right = NULL; while (1) { left = str;//把这个单词的第一个字母所对应的地址传给left while (((*str) != ' ')&&((*str)!='\0')) { str++; }//经过循环后,str存放的是空格所在的地址 right = str - 1;//空格所在的地址减一就是这个单词最后一个字母的地址,传给right reverse(left, right); str++;//向后加一个到下一个单词的第一个字母的地址 if (*str == '\0')//当传到最后一个字母之后,再加一,得到的就是'\0',这是需要跳出循环 { break; } } } int main() { char arr[] = "student a am i";//定义一个数组,存放给定的元素 change_arr(arr); printf("%s\n", arr); system("pause"); return 0; }

3.执行结果

转载请注明原文地址: https://www.6miu.com/read-2627219.html

最新回复(0)