読者です 読者をやめる 読者になる 読者になる

kira924ageの雑記帳

日々の記録。

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

C言語

はじめに

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

ポインタを使う

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

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

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

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

実装

配列のi番目と(文字列の長さ-1-i)番目の要素を(文字列の長さ÷2)回入れ替えてる。
終端文字があるのでi番目の要素と(文字列の長さ-i)番目の要素を入れ替えてはダメ。

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;
}

こんな風に使える。

終わりに

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