有一个字符数组的内容为:"student a am i",  请你将数组的内容改为"i am a student".

    xiaoxiao2025-08-11  6

    问题描述:

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

    问题分析:

    1、键入一串字符,并保存在数组里;

    2、先对整体字符串逆置,后对每个单词逆置;

    3、打印,输出结果。

    源代码:

    #include <stdio.h> #include <windows.h> #include <string.h> #include <assert.h> int My_Strlen(char *p) //自定义求字符串长度函数 { int count = 0; while (*p != '\0') { count++; p++; } return count; } void reverse_str(char* left, char * right)//逆置字符串函数 { assert(left != NULL); assert(right != NULL); while (left < right) { char tmp = 0; tmp = *left; *left = *right; *right = tmp; left++; right--; } } void reverse(char* str) { //整体逆置 char *ret = str; int len = My_Strlen(str); reverse_str(str, str + len - 1); while (*str != '\0')//单词逆置 { char*start = str; char*end = start; while (*end != ' ' && (*end != '\0')) { end++; } reverse_str(start, end - 1); if (*end != '\0') { str = end + 1; } else { str = end; } } return ret; } int main() { char arr[] = "student a am i"; reverse(arr); printf("%s\n", arr); system("pause"); return 0; }

     

    最新回复(0)