有一个字符数组内容为“student a an i”,不用库函数,只能开辟有限个空间,将数组内容改为“i am a student”
#include<stdio.h> #include<stdlib.h> void swap(char *left, char *right) //定义具有逆置字符功能的函数 { int tmp = 0; while (left < right) { tmp = *left; *left = *right; *right = tmp; left++; right--; } } int my_strlen(char *str) //定义求取字符串长度的函数,返回count指向int型的具体值 { int count = 0; while (*str++) { count++; } return count; } void reverse_str(char arr[]) //定义逆置字符串的函数 { char *start = arr; char *end = arr + my_strlen(arr) - 1; //此处的字符串长度就可以调用my_strlen int *curr = 0; if ((arr == ' ') || (arr[0] == '\0')) //如果指针为空或者首元素为字符串结束符 { return; //字符串为空,直接结束程序 } swap(start, end); while (*arr) //不为NULL,‘\0’的情况 { curr = arr; while ((*arr != '\0') && (*arr != ' ')) //元素不为\0和空白符,说明一个单 //词还未读取完毕 { arr++; } end = arr - 1; //如果为空白符arr-1说明退至此单词末尾字母处,如果为 //‘\0‘ arr-1说明退至字符串结束位置处的前一位 swap(curr, end); if (*arr == ' ') //指针指向的内容为空白符时,指针移动到下一单词的 //首字母处,去除了指向结束符时指针仍旧移动而越界 //的弊端 { arr++; } } } int main() { char arr[] = "student a am i"; reverse_str(arr); printf("%s\n", arr); system("pause"); return 0; }