Re: [問題] 字串倒轉 - 只倒轉母音
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):