スポンサーリンク

[c言語]文字列を逆順に入れ替える関数

参考:[c言語]int型の数字を逆順に入れ替える(サンプルコード)

第一引数のstrの文字列を逆順に入れ替えます。

void revStr(char* str){
	int size = strlen(str);
	int i,j;
	char tmp = {0};
	
	for(i = 0, j = size - 1; i < size / 2; i++, j--){
		tmp = str[i];
		str[i] = str[j];
		str[j] = tmp;
	}
	
	return;	
}

ポイントは下記でしょうか。
for文で前方と後方から中央に1文字ずつ進めていき、
前と後ろで置換処理をします。

	for(i = 0, j = size - 1; i < size / 2; i++, j--){
		tmp = str[i];
		str[i] = str[j];
		str[j] = tmp;
	}

サンプルコード

下記がサンプルコードになります。

$ cat sample.c
#include <stdio.h>
#include <string.h>


void revStr(char* str){
	int size = strlen(str);
	int i,j;
	char tmp = {0};
	
	for(i = 0, j = size - 1; i < size / 2; i++, j--){
		tmp = str[i];
		str[i] = str[j];
		str[j] = tmp;
	}
	
	return;	
}

int main(){
	char str[] = "After";
	printf("%s\n", str);
	
	revStr(str);	
	
	printf("%s\n", str);

	return 0;
}

下記が実行結果になります。
$ gcc -o sample sample.c
$ ./sample 
After
retfA

スポンサーリンク

Pythonでもコード書いてみました

下記がサンプルコードになります。

分かりやすさのため、変数をleftとrightの変数名にしています。
revStr()の引数はリスト型を想定しています。

#!/usr/bin/env python3
# coding: UTF-8


def revStr(s):
        for left in range(int(len(s) / 2)):
            right = int(len(s)) - 1 - left
            s[left], s[right] = s[right], s[left]
        

if __name__ == '__main__':
	s = ['a', 'f', 't', 'e', 'r']
	revStr(s)
	print(s)

c言語だと一回tmpを経由してましたが、Pythonだと下記のように書けます。

            s[left], s[right] = s[right], s[left]

下記が実行結果になります。

$ ./sample.py 
['r', 'e', 't', 'f', 'a']

スポンサーリンク