C语言实现字符串倒置
前言
在实现功能之前,要先向大家具体描述一下字符串倒置的内容。假设有一话内容为"I like .“,要求单词倒置,标点不倒置, 即倒置之后就变成“. like I”。
思路解析
这道题目思路正确的话就不算太难,相比于字符串逆序,这道题相当于逆序两次,第一次倒序把整个字符串的内容逆序到一个正确的位置,后面的倒序对每个单词逆序。大意如图:
本质上第一次倒序和后面几次的倒序没有什么区别,我们可以用只用一个函数来实现所有的倒序过程,问题在于后面几次倒序要确定要倒序的内容?
在整个句子中可以利用空格来确定要倒序的单词长度,注意在倒序最后一个单词时判断条件应该\0。
代码实现
解决上述问题后,整个代码还是比较简单的,源码如下:
void change(char* arr, int le, int ri)
{char* left = arr + le;char* right = arr + ri;while (left < right){char tmp = *right;*right = *left;*left = tmp;left++;right--;}
}
int main()
{char arr[100] = { 0 };gets(arr);//使用scanf//scanf("%[^\n]", arr);int le = 0;int ri = strlen(arr) - 1;change(arr, le, ri);int count = 0;char* p = arr;while (count < ri){ int dian = count;while (*(p + count) != ' ' && *(p + count) != '\0'){count++;}change(arr, dian,count-1);count++;}printf("%s\n", arr);return 0;
}
需要注意的是:第一,scanf读取到空格就会停止,因此这里用gets,当然真的想用scanf也不是不行,只是要稍作改变了,具体请看上方注释。
第二,在后续的循环判断中,我们是先判断在计数,这就会导致空格被我们倒置到单词的前面,因为在传参是要减一。
以上,就是整道题的思路了,觉得还可以的朋友点个赞吧qaq