在搜索有关如何反转字符串的C程序时,我遇到了以下程序。我已经熟悉了一个程序,我们取字符串的长度,然后减去每个字符并找到相反的结果。但这是一个不同的计划。那么有人可以告诉我这段代码是如何工作的吗?将非常感谢帮助。 使用的编译器是Borland Turbo c。
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main() {
char str[50];
char rev[50];
int i, j, n;
clrscr();
printf("enter the string to be reversed:");
scanf("%s", &str);
for (i = 0; str[i] != 0; i++) {
n = i - 1;
}
for (j = 0; j <= i - 1; j++) {
rev[j] = str[i];
n--;
}
printf("the reverse of the string is:%s", rev);
getch();
}
答案 0 :(得分:0)
你的代码没有按预期工作。你试过吗?
考虑这种方法来反转字符串:
#include <stdio.h>
#include <string.h>
int reverse(char *Str);
void swap(char *x, char *y);
int main(int argc, char *argv[]) {
char Str[255];
printf("enter the string to be reversed : ");
scanf("%s", Str);
reverse(Str);
printf("the reverse of the string is : %s\n", Str);
}
int reverse(char *Str) {
size_t len = strlen(Str);
size_t n = len / 2;
char *begin = Str;
char *end = (Str + len) - 1;
while (n > 0) {
swap(begin, end);
begin++;
end--;
n--;
}
return 0;
}
void swap(char *x, char *y) {
char tmp;
tmp = *x;
*x = *y;
*y = tmp;
}
答案 1 :(得分:0)
在C中,字符串是NUL终止的,这意味着它在结尾处有'\0'
表示字符串的结尾。您目前发布的代码有两个问题:
此:
scanf("%s", &str);
应该是
scanf("%s", str);
因为%s
需要char*
,而不是char(*)[50]
。
此:
rev[j] = str[i];
应该是
rev[j] = str[n];
rev
应该是NUL终止的。添加
rev[j] = '\0';
之前
printf("the reverse of the string is:%s", rev);
避免未定义的行为。