2015-10-04 26 views
-5

在搜索C程序如何反轉字符串時,我遇到了下面的程序。我已經熟悉了一個程序,在這個程序中,我們取出字符串的長度,然後減去每個字符並找到相反的字符。但是這是一個不同的計劃。那麼有人可以告訴我這個代碼是如何工作的嗎?幫助將被感激地接受。 使用的編譯器是Borland Turbo c。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

這裏有點不對勁。 –

+1

這不是一個「解釋我的代碼」網站。這有幾個問題。獲得一個更好的解釋提供。 – Olaf

+0

該程序也不起作用。它是如何爲你工作的?該程序簡單地將'strlen(str)'NUL-終結符寫入'rev'。 –

回答

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; 
} 
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. rev應NUL結尾。添加

    rev[j] = '\0'; 
    

    只是

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

    避免未定義行爲。

+0

感謝您解決這個問題。我會糾正上述錯誤並嘗試執行代碼。 – Saneyar