簡體   English   中英

在 C 中使用指針的反向數組

[英]Reverse array with using pointers in C

#include <stdio .h>
#include <stdlib .h> 
int main(){
    char text1 [N] ; 
    char reverse [N] ;
    char* txtptr = text1 ;
    char* revtxtptr = reverse ;
    int N;
    printf (”\n Enter any text here : ”) ;
    scanf(”%s”, text1); 
    while(N> 0){
        txtptr --;
        *revtxtptr = *txtptr ;
        revtxtptr++;
    }
    *revtxtptr = ’\0’;
    printf (”The reverse text is : %s \n” , reverse) ;
    return 0; 
}

我想在這里看到 output 輸入的反轉形式。 類似輸入的東西:

CLEARLY

output:

YLRAELC

你能幫我改正我的錯嗎?

以下是對您的代碼的更正:

  1. #include行中的.h>之前有空格。
  2. 您應該限制緩沖區的大小。
  3. N 未初始化。
  4. N 沒有遞減。
  5. txtptr沒有放在 C 字符串的末尾,但它在while循環中被遞減。
  6. scanf不限於緩沖區的大小減 1。
  7. 您需要使用strlen查找字符串的大小或遍歷字符串直到找到 '\0'。 (改為前進方向)
  8. 您使用了錯誤的雙引號和單引號(“智能”引號)

這是一個將反轉輸入數組(不是就地)的安全代碼:

#include <stdio.h>
#include <stdlib.h>

#define MAXSTR 255
#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)

int main() {
  char text1[MAXSTR + 1];
  char revbuf[MAXSTR + 1];
  char* txtptr = text1;
  char* reverse = revbuf + MAXSTR;
  printf("\nEnter any text here : ");
  scanf("%" STR(MAXSTR) "s", text1);
  *reverse = '\0';
  while(*txtptr) {
    *--reverse = *txtptr++;
  }
  printf ("The reverse text is : %s \n" , reverse) ;
  return 0;
}

這里有一個用於 int 數組的示例 function。

int *reverseINTarray(int *array, size_t size)
{
    int *end, *wrk = array;
    if(array && size > 1)
    {
        end = array + size - 1;
        while(end > wrk)
        {
            int tmp = *wrk;
            *wrk++ = *end;
            *end-- = tmp;
        }
    }
    return array;
}

或者

int *reverseINTarray(const int *src, int *dest, size_t size)
{
    int *wrk = dest;
    if(src && dest && size)
    {
        wrk += size - 1;
        while(size--)
        {
            *wrk-- = *src++;
        }
    }
    return dest;
}

您的“交換兩個字節”邏輯是......只是......錯誤。 這給你任何想法嗎?

char temp;
temp = *chartxtptr;
*chartxtptr = *txtptr;
*txtptr = temp;

如果不使用臨時來保存即將被替換的字節,則不能“交換”任何兩個字節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM