网站都要交域名费么,网站开发公司营业范围,百度竞价推广计划,wordpress邮箱验证一、倒置句子
将句子中的单词位置倒置#xff0c;标点不用倒置#xff0c;例如i love you.倒置结果是#xff1a;you. love i。 1、两步翻转法
采用两步翻转法来实现单词位置的倒置。首先#xff0c;它整体翻转整个字符串#xff0c;然后再逐个翻转每个单词内的字符。
…一、倒置句子
将句子中的单词位置倒置标点不用倒置例如i love you.倒置结果是you. love i。 1、两步翻转法
采用两步翻转法来实现单词位置的倒置。首先它整体翻转整个字符串然后再逐个翻转每个单词内的字符。
#include stdio.h
#include string.hvoid ReverseString(char* ptr)
{char temp \0;int length (int)strlen(ptr);int i 0,j 0;for (i 0,j length - 1; i length / 2; i,j--){temp *(ptr j);*(ptr j) *(ptr i);*(ptr i) temp;}for (i 0,j 0; i length; i){j i;while (*(ptr j) ! j length){j;}int WordEnd j - 1;while (i WordEnd){temp *(ptr i);*(ptr i) *(ptr WordEnd);*(ptr WordEnd) temp;i;WordEnd--;}i j;}
}int main()
{char arr[10001] { \0 };fgets(arr, 10001,stdin);ReverseString(arr);printf(%s\n, arr);return 0;
}
工作流程 函数定义 void ReverseString(char* ptr)这是一个自定义函数接收一个字符串指针ptr作为参数旨在反转该字符串中单词的顺序。 变量声明和初始化 temp用于字符交换的临时变量。length通过调用strlen(ptr)得到输入字符串的长度。i和j作为索引变量在字符串操作中使用。 第一个for循环整体翻转字符串 这个循环负责将整个字符串从头到尾翻转。通过交换指针ptr指向的首尾两端的字符利用索引i从头开始索引j从尾开始直到它们相遇在字符串的中间。 第二个for循环翻转单词内的字符 在字符串被整体反转之后这个循环的目的是将每个单词内部的字符顺序重新翻转到正确的顺序。i从字符串的开始位置遍历j用来查找单词的结尾即空格字符或字符串的末尾。WordEnd是找到的单词的末尾索引。当内部的while循环开始时i和WordEnd用来交换单词内部的字符直到单词被翻转到其原始顺序。 main函数 arr一个足够大的字符数组用来存储用户通过gets_s函数输入的字符串。gets_s(arr, 10001)安全地读取用户输入的字符串。gets_s是一个安全版本的函数用于避免缓冲区溢出第二个参数表示最大的字符串长度。ReverseString(arr)调用前面定义的ReverseString函数传入用户输入的字符串arr。printf(%s\n, arr)打印经过单词顺序翻转后的字符串。
运行结果 2、倒读翻转法
从字符串的最后读取字符串内容用两个数组存储将原数组从尾部读取到首部把单词一个个填入新数组中。
#include stdio.h
#include string.hvoid ReverseString(char* ptr1, char* ptr2)
{int len strlen(ptr1);ptr1 len;while (len 0){while (*(ptr1) ! len 0){if (len ! 1){ptr1--;}len--;}char* ptr3 NULL;if (len 0){ptr3 ptr1 1;}else{ptr3 ptr1;}while (*(ptr3) ! *(ptr3) ! \0){*ptr2 *ptr3;}if (len 0){*ptr2 ;ptr1--;if (len ! 1){len--;}}}
}int main()
{char arr1[100] { \0 };char arr2[100] { \0 };fgets(arr1, 100,stdin);ReverseString(arr1, arr2);printf(%s\n, arr2);return 0;
}
主要函数 ReverseString 进行详细分析 首先获取输入字符串 ptr1 的长度并将指针移动到字符串的末尾。 while 循环开始迭代每次循环都是处理字符串中的一个单词。 内部的 while 循环负责找到单词的开始位置。它通过回退解析字符串直到找到一个空格这表示一个单词的结束。特别注意如果长度为1指针不回退这处理了字符串开头的特殊情况即第一个单词是一个字母的情况例如第一个单词是I。 一旦找到空格或者到达字符串的开始指针 ptr3 被设置为当前单词的第一个字符。 接下来的 while 循环将当前单词复制到输出字符串 ptr2 中。该循环依次复制字符直到遇到空格或字符串终止符 \0 循环结束后这个单词完成复制。 如果还没有处理完所有字符len 0在 ptr2 中添加一个空格以分隔单词并将 ptr1 指针再次回退一个字符以找到下一个单词的结束。 这个过程不断重复直到处理完所有的字符即 len 为0。 在 main 函数中通过 gets_s 函数从用户那里接受一个字符串。然后调用 ReverseString 函数处理这个字符串并将结果打印出来。
运行结果