asp.ney旅游信息网站下载 简洁,濮阳微信网站开发,邢台网站建设开发,新手可以做网站营运吗用C语言将一句话的单词倒置#xff0c;标点不倒置。 比如输入#xff1a; i like shanghai. 输出得到#xff1a; shanghai. like i 这道题目有很多种做法#xff0c;既可以用递归#xff0c;也可以分成两部分函数来写#xff0c;本文就详细来讲解分装为两个函数的做法。… 用C语言将一句话的单词倒置标点不倒置。 比如输入 i like shanghai. 输出得到 shanghai. like i 这道题目有很多种做法既可以用递归也可以分成两部分函数来写本文就详细来讲解分装为两个函数的做法。
思路我们可以轻易实现一个字符串的倒置可以先将整个字符串来倒置然后再设置函数来倒序每一个单词用空格作为区分每个单词的标志这样下来就可以实现将一句话单词倒置标点不倒置。
主函数如下所示。
int main()
{char s[100] { 0 };gets_s(s);int start0, endstrlen(s);reverse(start, end, s);reverse_word(start, end, s);printf(%s, s);return 0;
} 1.reverse函数的构建 首先构建reverse函数来实现整个字符串的逆转只需创建一个中间变量即可。
void reverse(int start, int end, char s[])
{end--;while (start end){char tmp s[start];s[start] s[end];s[end] tmp;start;end--;}
}
需要注意的是为了保证下标不在标点的位置即为了不交换符号end一定要-1。
如果不想再函数内部减一的话可以在进行函数传参的时候减一。 2.reverse_word函数的创建 接下来创建将每一个单词逆转的函数我们使用两个while循环。
外层循环的循环条件为while (s[end] ! \0)当end的位置走到\0的位置时循环结束。
内部的while循环是将end移位到一个单词的末尾也就是空格的位置与在开头的start共同将一个单词锁定接着就可以再次调用上面的reverse函数实现单词的逆序。
要注意的是单词的末尾可能是\0为了防止s[end]取到零值而导致函数提前结束我们将不等于零值也变为循环的条件。
将一个单词逆序之后我们将目标转换为下一个单词先将end的值赋给start再让end移位到下一个空格处锁定第二个单词。
void reverse_word(int start, int end, char s[])
{start 0, end 0;while (s[end] ! \0){while (s[end] ! s[end]!\0){end1;}reverse(start, end, s);start end1;if(s[end]!\0)end 1;}
} 完整代码
#define _CRT_SECURE_NO_WARNINGS
#includestdio.h
#includestring.hvoid reverse(int start, int end, char s[])
{end--;while (start end){char tmp s[start];s[start] s[end];s[end] tmp;start;end--;}
}
void reverse_word(int start, int end, char s[])
{start 0, end 0;while (s[end] ! \0){while (s[end] ! s[end]!\0){end1;}reverse(start, end, s);start end1;if(s[end]!\0)end 1;}
}
int main()
{char s[100] { 0 };gets_s(s);int start0, endstrlen(s);reverse(start, end, s);reverse_word(start, end, s);printf(%s, s);return 0;
} 文章如果有问题的话还请大佬们不吝赐教
如果您觉得我写的不错不妨点个赞支持一下哦~