程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> [C語言] 字符串逆序

[C語言] 字符串逆序

編輯:關於C語言

[C語言] 字符串逆序


字符串逆序有多種辦法,下面我們分方法而論:
 
// 非遞歸實現字符串反轉:
 
char *reverse(char *str)   
{   
if( !str )   
{   
return NULL;
}   
   
    int len = strlen(str);
    int i,j;   
    char temp;   
    for( i = 0,j=len-1; i<j;i++,j--)
    {   
        // 交換前後兩個相應位置的字符   
         temp=str[i];
         str[i]=str[j];
         str[j]=temp;
    }   
   
    return str;   
}
 
int main()
{
    char src[] = {"abcdef"};
    char *pdest = reverse(src);
    puts(src);
    return 0;
}
 
//遞歸就是一種棧結構:
 
#include<stdio.h>
#include<assert.h>
 
void reverse_string(const char * const string)
{
    assert(string);
    if (*string == '\0')
        return;
    else
        reverse_string(string+1);// 先將字符壓棧
    putchar(*string);// 再將字符按照先進後出的順序輸出
}
int main()
{
    char string[20] = {0};
    scanf("%[^\n]",string); 
    reverse_string(string);
    printf("\n");
    return 0;
}
 
亦可:(若要求不使用其他庫函數)
 
#include<stdio.h>
#include<assert.h>
 
int my_strlen(const char *string)
{
    assert(string);
    if(*string == '\0')
    {
        return;
    }
    else
        return 1+my_strlen(string+1);
}
 
 
char *reverse_string(char *string,int len)
{
    assert(string);
    if(!string)
    {
        return NULL;
    }
    if(len > 1)
    {
        char tmp = string[0];
        string[0] = string[len-1]; 
        string[len-1] = '\0';           // 最後一個字符在下次遞歸時不再處理
        reverse_string(string + 1,len-2);//遞歸調用,每調用一次,要反轉的字符串分別從頭和末尾各減少一個 
        string[len-1] = tmp;
    }
    return string;
}
 
int main()
{
    char string[20] = {0};
    int len;
    scanf("%s",string);
    len = my_strlen(string);
    reverse_string(string,len);
    printf("%s\n",string);
    return 0;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved