C言語でchar型を返す関数。

はじめに

 C言語で文字列sが与えられたときsを逆順したものを返す関数をなぜか作りたくなった。

ポインタを使う

 文字列を返す関数を作るときはintやdoubleなどと同じように、

  • 間違え
char hoge(char fuga){
//何らかの処理
return fuga;
}

のようにしてはダメ。
C言語の文字列は配列であるため、その配列のアドレスを指すポインタを返すようにする。

  • 正解
char *hoge(char *fuga){
//何らかの処理
return fuga;
}

実装

配列のi番目と(文字列の長さ-1-i)番目の要素を(文字列の長さ÷2)回入れ替えてる。

char *reverse(char *s)
{
  int i;
  char tmp;
  for(i=0; i<strlen(s)/2; i++){
      tmp = s[i];
      s[i] = s[strlen(s)-1-i];
      s[strlen(s)-1-i] = tmp;
  }
  return s;
}

使用例

例えばこの問題の仕様に合わせるのであれば、

#include <stdio.h>
#include <string.h>

char *reverse(char *s)
{
  int i;
  char tmp;
  for(i=0; i<strlen(s)/2; i++){
      tmp = s[i];
      s[i] = s[strlen(s)-1-i];
      s[strlen(s)-1-i] = tmp;
  }
  return s;
}

int main()
{

  char str[21];

  fgets(str, sizeof(str), stdin);
  printf("%s\n", reverse(str));

  return 0;
}

こんな風に使える。

終わりに

 ポインタを全然理解していなかったため、こんな簡単な処理をするだけの関数を書くのにかなり時間がかかってしまった。