2013年1月17日 星期四

[C Programming] 反轉字串實作

認真說起來,這其實也並不算困難的實作,
只是如果沒有事先想過和處理,
實作的時候就會弄出一大堆bug。

如果條件限定函式傳入char*,傳出也是char*,
但不可以覆蓋過原先傳入的值,就可以使用上一篇提到的malloc。

函式實作如下:
char* strReverse(char *s){
 int len = 0; int i;
 char *ptr;  ptr = s;
 while(ptr[len]!='\0') 
  len++;
 printf("Total length: %d\n",len);
 ptr = (char *)malloc((len+1)*sizeof(char));
 for(i=0;i<len;i++)
  ptr[i] = s[len-i-1];
 ptr[len] = '\0';
 return ptr; 
}

你可以用或者不用(char *)來指定malloc的東西,但主動寫出來cast會好一點。
常犯的錯誤會在:char array的結尾為'\0'。
由於是特殊字元,所以要加上"\"作為跳脫用。
且使用malloc()來宣告char array的時候,電腦不會好心幫你加上'\0'......
你要自己記得加,切記切記。
最後,用malloc()的話,記得自己要使用free()來釋放記憶體。

一個搭配主程式的範例如下:

int main(int argc, char *argv[])
{
  char str[50];
  printf("Enter a string: ");
  scanf("%s", str);
  char* revPtr = strReverse(str);
  printf("After strReverse: %s\n",revPtr);
  free(revPtr); revPtr = 0;
  system("PAUSE"); 
  return 0;
}

沒有留言:

張貼留言