Re: [問題] 字串倒轉 - 只倒轉母音

看板C_and_CPP作者 (Sam)時間8年前 (2016/05/11 15:08), 8年前編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《EngRookie (EngRookie)》之銘言: : 大家好,小弟又來打擾各位,小弟有兩個問題如下: : 1. 在不新增副函式的引數 char *returnStr 是否有其他辦法 return 字串回去? 你的 returnStr 根本沒用,不信你把它移除看看。 : 2. 我的 malloc 是建立在副函式裡面並且在最後 return 回去,我該如何 free(pointer)呢? 在 main 裡面 free(returnStr), 因為 returnStr 已經拿到 malloc 得到的記憶體位址。 : 程式碼如下: : #include "stdafx.h" : #include <stdio.h> : #include <stdlib.h> : #include <stdbool.h> : bool isVowels(char *s) ^ 寫錯了 : { : if (s >='A'&& s <='Z') : s += 'a' - 'A'; : return s == 'a' || s == 'e' || s == 'i' || s == 'o' || s == 'u'; : } : char* reverseVowels(char* s, char *returnStr) ^^^^^^^^^^^^^^^^^ 刪掉 : { : int L = 0, R = strlen(s) - 1; : char tempChar = '0'; : char *Array = (char *)malloc(strlen(s)*sizeof(char)); ^ 再補個 + 1,不然字串結尾字元 '\0' 會溢出到合法記憶體空間之外。 : for (int i = 0; i < strlen(s); i++) : Array[i] = *(s + i); : while (L < R) : { : while (!isVowels(Array[L])) : L++; : while (!isVowels(Array[R])) : R--; : if (L < R) : { : tempChar = Array[L]; : Array[L] = Array[R]; : Array[R] = tempChar; : } : L++; : R--; : } : *(Array + strlen(s)) = '\0'; : return returnStr = Array; ^^^^^^^^^^^^ 刪掉 : } : int main(int argc, char* argv[]) : { : char *returnStr = '0'; ^^^ 寫錯了 : returnStr = reverseVowels("Hello", returnStr); ^^^^^^^^^^^ 刪掉 : printf("returnStr = %s\n", returnStr); : returnStr = reverseVowels("LeetCode", returnStr); ^^^^^^^^^^^ 刪掉 : printf("returnStr = %s\n", returnStr); free(returnStr); : system("pause"); : return 0; : } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.236.57.84 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1462950496.A.58D.html ※ 編輯: EdareuqSam (36.236.57.84), 05/11/2016 15:08:47

05/11 15:21, , 1F
謝謝您 : )
05/11 15:21, 1F
文章代碼(AID): #1NCjfWMD (C_and_CPP)
文章代碼(AID): #1NCjfWMD (C_and_CPP)