文字列を入力して末尾に.andがあれば.iosにして出力する文字列を作りたいのですが、
イメージとして.iosという配列にNULL文字も含めた状態でstrcmpで比較し置き換えるという形でやってみたいのですが
20行目からの関数で入力する文字列で末尾4文字と置き換えをどういった形で示せばいいのか分かりません。
どうかお手伝いお願いします。
文字置換
- tk-xleader
- 記事: 158
- 登録日時: 14年前
- 連絡を取る:
Re: 文字置換
strlenを使えば文字列の長さが分かるので、それを使って末尾から4文字目のところのアドレスを求めて、そこから比較すればいいのではないでしょうか?
Re: 文字置換
こんな感じですね。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;
}
}
strstrだと、工夫しないと文字列の途中にも.andがある場合に失敗する可能性があるので、今回は面倒くさいでしょう。non さんが書きました:文字列を検索するなら strstr関数の方がstrcmpを使うより便利です。
見つかった場所をポインタで返すので、今回は拡張子の文字数が同じなので、一文字づつコピーすれば良いでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)