文字列入れ替えのプログラムについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
JP

文字列入れ替えのプログラムについて

#1

投稿記事 by JP » 6年前

元の文字 a b c d e f g h i j k l m n o p q r s t u v w x y z
入替え後 Z C B E D G F I H K J M L O N Q P S R U T W V Y X A
1文字を引数として受け取り、上記のように入れ替えた文字(表に含まれて
いない文字は引数そのもの)を戻り値とする関数を作成する。といった課題なのですが

文字列を1文字ずらすことはできるのですが上記の入れ替え方がいまいち書き方がわかりません、ご教授お願いします、、

コード:

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

void cipher(char str[]){
int i,j;
j=strlen(str);

for(i=0;i<j;i++){
if(str[i] >= 'a' && str[i] <= 'z'){
str[i]++;
if (str[i] == 'z' + 1 ) 
str[i] -= 'Z' - 'A' + 1;
if (str[i] == 'a' + 1 )
str[i] -= 'A' - 'Z' + 1;

str[i]-='a'-'A'; /*小文字を大文字に*/
}
}
}

int main()
{
char str[128];

fgets(str,128,stdin);
cipher(str);
printf("%s",str);


return 0;
}

かずま

Re: 文字列入れ替えのプログラムについて

#2

投稿記事 by かずま » 6年前

すみません。
文字の出現数、出現率に回答を送信してしまいました。

ソースプログラムは、字下げ(インデント)をしてください。

JP

Re: 文字列入れ替えのプログラムについて

#3

投稿記事 by JP » 6年前

すいません、こちらを使用したのは初めてでして。以後気をつけます。
まずはお返事ありがとうございました。非常に参考になりました。
意見の通り組んでみたところaとzのみ上手くいきません、、基礎の基礎な質問ですいませんが教えてもらえると助かります

コード:

void cipher(char str[]){
int i,j,n;
j=strlen(str);
 
for(i=0;i<j;i++){
if(str[i] >= 'a' && str[i] <= 'z'){
n=str[i]-'a';
if(n==0)str[i]='Z';
if(n==25)str[i]='A';

if(n%2==0)str[i]=('A'+n-1);
if(n%2!=0)str[i]=('A'+n+1);
}
}
}

int main()
{
char str[128];
 
fgets(str,128,stdin);
cipher(str);
printf("%s",str);
 
 
return 0;
}

かずま

Re: 文字列入れ替えのプログラムについて

#4

投稿記事 by かずま » 6年前

JP さんが書きました:意見の通り組んでみたところaとzのみ上手くいきません
0 は偶数、25は奇数です。else を付けましょう。
ソースプログラムは、字下げ(インデント)をしてください。

コード:

#include <stdio.h>  // fgets, stdin, puts

void cipher(char str[])
{
	int i, n;

	for (i = 0; str[i]; i++) {
		if (str[i] >= 'a' && str[i] <= 'z') {
			n = str[i] - 'a';
			if (n == 0)
				str[i] = 'Z';
			else if (n == 25)
				str[i] = 'A';
			else if (n % 2 == 0)
				str[i] = 'A' + n - 1;
			else
				str[i] = 'A' + n + 1;
		}
	}
}

int main(void)
{
	char str[128];

	fgets(str, 128, stdin);
	cipher(str);
	puts(str);
	return 0;
}
ソースプログラムは、字下げをしてください。

かずま

Re: 文字列入れ替えのプログラムについて

#5

投稿記事 by かずま » 6年前

すみません。
printf("%s", str); を puts(str); に変えてしまいましたが、
fgets() で取得した str は最後に '\n' を含んでいるので、
元の printf() のほうがよかったでしょう。

返信

“C言語何でも質問掲示板” へ戻る