您的位置:首页 > 其它

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

2017-05-08 19:55 971 查看
首先将整个字符串颠倒过来 也就是将数组逆序存储,【写代码时我把定义的临时变量mid定义成arr[mid],并且还将mid 初始化为0,导致后来一直出错,不可以定义下标,因为下标都是有left和right来控制的】

其次再将每个单词颠倒,这里我出现的问题比较多,开始我是苦恼于应该用if语句还是while语句判断条件,但是之后是需要不断调整left和right并且再次交换字符的,所以这里用while语句更恰当,之后便是right的自增问题,一开始我是直接单独用right++来控制,但是right不能一直增加,要在Len范围内,所以就考虑到该使用for循环来控制。

判断arr[left]和arr[right]进行交换的条件我设定为只要arr[right] 为空格,就退一和left的值进行交换,但是这里有个问题,到字符串最后一个单词的时候,后面是没有空格的,所以条件要或上一个判断是否是反斜杠0【\0】,或运算前者是真便不判断后一个条件,反之,前者若为假,则要进行后一条件的判断。

结果是:i am a student

void re_string(char *arr,int len)

{

int left = 0;
int right = len - 1;
while(left <= right)
{
char mid;
mid = arr[right];
arr[right] = arr[left];
arr[left] = mid;
right--;
left++;
}

}

void re_word(char *arr,int len)

{
int left = 0;
int right = 0;
for (right = 0; right <= len; right++)
{

if(arr[right] == ' '||arr[right] == '\0')
{
int r = right-1;
int l = left;
while (l <= r)
{
char mid;
mid = arr[r];
arr[r] = arr[l];
arr[l] = mid;
r--;
l++;
}
left = right + 1;
}

}

}

int main()

{
char arr[50] = "student a am i";//i ma a tneduts
int len = strlen(arr);
re_string(arr,len);
re_word(arr,len);
printf("%s\n", arr);
system("pause");
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  学习 生活 个人
相关文章推荐