[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']
