关于如何撤销所需数字解释的C程序

时间:2015-10-04 13:42:25

标签: c reverse

在搜索有关如何反转字符串的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();
}

2 个答案:

答案 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'表示字符串的结尾。您目前发布的代码有两个问题:

  1. 此:

    scanf("%s", &str);
    

    应该是

    scanf("%s", str);
    

    因为%s需要char*,而不是char(*)[50]

  2. 此:

    rev[j] = str[i];
    

    应该是

    rev[j] = str[n];
    
  3. 在打印之前,
  4. rev应该是NUL终止的。添加

    rev[j] = '\0';
    

    之前

    printf("the reverse of the string is:%s", rev);
    

    避免未定义的行为。