文字置換

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

文字置換

#1

投稿記事 by nonta » 4年前

文字列を入力して末尾に.andがあれば.iosにして出力する文字列を作りたいのですが、
イメージとして.iosという配列にNULL文字も含めた状態でstrcmpで比較し置き換えるという形でやってみたいのですが
20行目からの関数で入力する文字列で末尾4文字と置き換えをどういった形で示せばいいのか分かりません。
どうかお手伝いお願いします。

コード:

#include<stdio.h>
#include<string.h>
#define MAX 100

int irekae(char *x);

int main(void)
{
	char a[MAX];

	printf("文字列入力\n");
	scanf("%s", a);

	irekae(a);

	printf("%s", a);

	return 0;
}
int irekae(char *x)
{
	char b[] = ".ios\0";
	int i;

	i = strcmp(&x[], &b[5]);
	if (i<0)
}

アバター
tk-xleader
記事: 153
登録日時: 9年前
連絡を取る:

Re: 文字置換

#2

投稿記事 by tk-xleader » 4年前

strlenを使えば文字列の長さが分かるので、それを使って末尾から4文字目のところのアドレスを求めて、そこから比較すればいいのではないでしょうか?

non
記事: 1097
登録日時: 9年前

Re: 文字置換

#3

投稿記事 by non » 4年前

>int irekae(char *x);
返値がintですが何を返したいですか?

文字列を検索するなら strstr関数の方がstrcmpを使うより便利です。
見つかった場所をポインタで返すので、今回は拡張子の文字数が同じなので、一文字づつコピーすれば良いでしょう。

PS.
>char b[] = ".ios\0";
\0は不要です。
と思ったのですが、もしかして、 ****.anda のような拡張子の場合も考慮する?
non

アバター
みけCAT
記事: 6274
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: 文字置換

#4

投稿記事 by みけCAT » 4年前

tk-xleader さんが書きました:strlenを使えば文字列の長さが分かるので、それを使って末尾から4文字目のところのアドレスを求めて、そこから比較すればいいのではないでしょうか?
こんな感じですね。

コード:

#include<stdio.h>
#include<string.h>
#define MAX 100

int irekae(char *x);

int main(void)
{
	char a[MAX];

	printf("文字列入力\n");
	scanf("%s", a);

	irekae(a);

	printf("%s", a);

	return 0;
}
int irekae(char *x)
{
	static char from[] = ".and";
	static char to[] = ".ios";
	size_t i;

	i = strlen(x);
	if (i >= 4 && strcmp(x + i - 4, from) == 0) {
		strcpy(x + i - 4, to);
		return 1;
	} else {
		return 0;
	}
}
non さんが書きました:文字列を検索するなら strstr関数の方がstrcmpを使うより便利です。
見つかった場所をポインタで返すので、今回は拡張子の文字数が同じなので、一文字づつコピーすれば良いでしょう。
strstrだと、工夫しないと文字列の途中にも.andがある場合に失敗する可能性があるので、今回は面倒くさいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

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