ただ今帰りました。休みの日で天気のいい日は必ずツーリングに行くのでm(_ _)m
春なんで、ツーリングにいい時期ですねぇ、ブログにも書きましたが昨日も観光に行ってました☆
では、回答の続きです。
左にローテートする関数でこんな感じにしてみました。
lenには文字列の長さが入っています。
void rotate_left(char moji[/url],int len){
int i; char a;
a=moji[0];
for(i=0;i<len-1;i++)
moji=moji[i+1];
moji[len-1]=a;
return ;
}
意味わかりますよね?右にローテートする関数はこんな風にしてみました。
void rotate_right(char moji[/url],int len){
int i; char a;
a=moji[len-1];
for(i=len-1;i>0;i--)
moji=moji[i-1];
moji[0]=a;
return ;
}
先ほどと逆を行ってるだけですね。
文字列の入力をちょっと工夫して、3文字以上の文字列でなかったらもう一度入力をうがなすようにしてみました。
以下メイン関数の一部です。
while(1){
printf("文字列を入力してください:");
scanf("%99s",&moji);
len=strlen(moji);
if(len<3){
printf("3文字以上の文字列を入力してください。\n");
continue;
}
else
break;
}
scanf文の中の99は最大で99文字しか入らないようにするためです。
100しか配列要素を用意していないので、バッファオーバーしないように書きました。
strlenは\0までの長さを求める関数です。\0は含めませんので、実質的な文字の長さです。
continueはループの最初に戻る、breakはループを抜けます。
#include <stdio.h>
#include <string.h>
void rotate_left(char moji[/url],int len){
int i; char a;
a=moji[0];
for(i=0;i<len-1;i++)
moji=moji[i+1];
moji[len-1]=a;
return ;
}
void rotate_right(char moji[/url],int len){
int i; char a;
a=moji[len-1];
for(i=len-1;i>0;i--)
moji=moji[i-1];
moji[0]=a;
return ;
}
int main(){
char moji[100]={};
int houkou,len;
while(1){
printf("文字列を入力してください:");
scanf("%99s",&moji);
len=strlen(moji);
if(len<3){
printf("3文字以上の文字列を入力してください。\n");
continue;
}
else
break;
}
while(1){
printf("左右どちらにローテートしますか?(左:1,右:2): ");
scanf("%d",&houkou);
if(houkou==1)
rotate_left(moji,len);
else if(houkou==2)
rotate_right(moji,len);
else{
printf("エラー\n");
break;
}
printf("ローテート結果:%s\n",moji);
}
return 0;
}
このサンプルを一度実行してみてください。
何度でもローテートできるようにしてあります。