C語言每日練習之字符串反轉

分析

在第18天:利用遞歸函數調用方式,將所輸入的字符以相反順序打印出來中,已經用過遞歸實現字符順序輸入,逆序輸出,今天的題目是字符串反轉,將以字符數組的形式來進行操作。

代碼實現

#include <stdio.h>
#include <string.h>
#define MAX_LENGTH  50 //最大長度
char *String_Invertion(char *str);
int main()
{
    char string[MAX_LENGTH];
    printf("請輸入一個字符串\n");
    scanf("%s", string);
    String_Invertion(string);
    printf("反轉後的字符串為%s\n", string);
    return 0;
}
/**
 * @brief 字符串反轉函數
 * @param str 目標字符串
 * @return 反轉後的字符串(str)
 */
char *String_Invertion(char *str)
{
    if(str == NULL)
        return NULL;
    int len = strlen(str);
    int i = 0;
    for(i = 0; i < len / 2; i++) //替換len/2次
    {
        /* (按位)異或交換法,其他交換法參考day27 */
        str[i] = str[i] ^ str[len - 1 - i];
        str[len - 1 - i] = str[i] ^ str[len - 1 - i];
        str[i] = str[i] ^ str[len - 1 - i];
    }
    return str;
}

運行結果

在這裡插入圖片描述

網上參考

//  Created by www.runoob.com on 15/11/9.
//  Copyright © 2015年 菜鳥教程. All rights reserved.
//
#include <stdio.h>
 
void reverse(char* s)
{
    // 獲取字符串長度
    int len = 0;
    char* p = s;
    while (*p != 0)
    {
        len++;
        p++;
    }
    // 交換 ...
    int i = 0;
    char c;
    while (i <= len / 2 - 1)
    {
        c = *(s + i);
        *(s + i) = *(s + len - 1 - i);
        *(s + len - 1 - i) = c;
        i++;
    }
}
int main()
{
    char s[] = "www.runoob.com";
    printf("'%s' =>\n", s);
    reverse(s);           // 反轉字符串
    printf("'%s'\n", s);
    return 0;
}

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: