ページ 1 / 1
文字置換
Posted: 2015年12月15日(火) 20:57
by nonta
文字列を入力して末尾に.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)
}
Re: 文字置換
Posted: 2015年12月15日(火) 21:37
by tk-xleader
strlenを使えば文字列の長さが分かるので、それを使って末尾から4文字目のところのアドレスを求めて、そこから比較すればいいのではないでしょうか?
Re: 文字置換
Posted: 2015年12月16日(水) 09:54
by non
>int irekae(char *x);
返値がintですが何を返したいですか?
文字列を検索するなら strstr関数の方がstrcmpを使うより便利です。
見つかった場所をポインタで返すので、今回は拡張子の文字数が同じなので、一文字づつコピーすれば良いでしょう。
PS.
>char b[] = ".ios\0";
\0は不要です。
と思ったのですが、もしかして、 ****.anda のような拡張子の場合も考慮する?
Re: 文字置換
Posted: 2015年12月16日(水) 21:57
by みけCAT
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がある場合に失敗する可能性があるので、今回は面倒くさいでしょう。