C 编写函数实现函数字符串字符颠倒
这是K&R中的一道题目:
编写一个函数reverse(s),将字符串s中的字符顺序颠倒过来。使用该函数编写一个程序,每次颠倒一个输入行中的字符顺序。
在PHP中曾经做过类似的题,见PHP 实现中文字符串截取无乱码,同样也是写reverse()
函数,我相信C中也有现成的函数,因为编译器高亮颜色不一样。
输出示例:
hello
olleh
源码:
#include <stdio.h>
#define MAXLINE 1000
int getline(char line[], int maxline);
void reverse(char s[]);
main(void)
{
char line[MAXLINE];
while (getline(line, MAXLINE) > 0) {
reverse(line);
printf("%s", line);
}
return 0;
}
int getline(char s[], int lim)
{
int c, i, j;
j = 0;
for (i = 0; (c = getchar()) != EOF && c != '\n'; ++i)
if (i < lim -2) {
s[j] = c;
++j;
}
if (c == '\n') {
s[j] = c;
++i;
++j;
}
s[j] = '\0';
return i;
}
void reverse(char s[])
{
int i, j;
char temp;
i = 0;
while (s[i] != '\0')
++i;
--i;
if (s[i] == '\n')
--i;
j = 0;
while (j < i) {
temp = s[j];
s[j] = s[i];
s[i] = temp;
--i;
++j;
}
}
其中getline()
在这一小章很常用,可是我不知道他的line
变量为什么能够顺利输出,明明是局部变量才对?等看了正式的一章一章应该就明白。
reverse()
函数比较容易理解:
void reverse(char s[])
{
int i, j;
char temp;
i = 0;
while (s[i] != '\0')
++i;
--i;
if (s[i] == '\n')
--i;
j = 0;
while (j < i) {
temp = s[j];
s[j] = s[i];
s[i] = temp;
--i;
++j;
}
}
将j
递增i
递减,有点像相遇问题,两边不断交换就反转了。
植入部分
如果您觉得文章不错,可以通过赞助支持我。
如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。