【C语言典例】:倒置字符串
文章目录
链接:https://www.nowcoder.com/questionTerminal/b0ae3d72444a40e2bb14af7d4cb856ba
来源:牛客网
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
输入描述:
每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100
输出描述:
依次输出倒置之后的字符串,以空格分割
示例1
输入
I like beijing.
输出
beijing. like I
思路分析
通过观察得知,先对整个字符串逆序,后对字符串中每一个单词逆序便可解决此问题。
1.对整个字符串进行逆序
2.对字符串中的每一个单词进行逆序
如图所示
注意事项
不能使用scanf,因为scanf一遇到空格就中止,可以使用gets();或者 gets_s();
gets_s()的使用
首先将字符串逆序独立成一个逆序字符的函数
*str为字符串首地址,right为字符串中最后一个字母的下标,
void reseve(char* str, int left, int right) { while (left < right) { char ch = str[left]; str[left] = str[right];//交换字符串 str[right] = ch; left++; right--; } }
其次对字符串中的每一个单词进行逆序
int temp = 0;//数组首元素的下标 for (int i = 0; i < len + 1; i++).//遍历字符串 { if (arr[i] == ' ' || arr[i] == 0)//遇到空格或者\0就需要单词逆序 { reseve(arr, temp, i - 1);//调用逆序数组, i为空格或者\0的下标 i-1为单词最后一个字母的下标 temp = i + 1;//下一个单词的第一个字母的下标 } }
全部代码
#include<string.h> #include<stdio.h> void reseve(char* str, int left, int right) { while (left < right) { char ch = str[left]; str[left] = str[right]; str[right] = ch; left++; right--; } } int main() { char arr[100] = { 0 }; gets_s(arr,100); int len = strlen(arr); reseve(arr, 0, len - 1); int temp = 0; for (int i = 0; i < len + 1; i++) { if (arr[i] == ' ' || arr[i] == 0) { reseve(arr, temp, i - 1); temp = i + 1; } } printf("%s", arr); return 0; }
结束语
上联:世界那么大,我想去看看;下联:钱包那么小,谁都走不了;横批:好好上班。