C言語で分からないところがあるのですが
すみません。C言語のポインタで分からないことがあって来ました。
ポインタの理屈は理解してはいるのですが、いざソースコードを書いてみようということになると全く手がつけられずにいます。
以下のソースコードですが、strlen()と同じ働きをする関数mystrlen()と、strcmp()と同じ働きをする関数mystrcmpを、ポインタを使って作成するものです。どこをどうすればいいのか教えてくださいませんか。
#include <stdio.h>
int main(void)
{
char str1[80], str2[80];
int i, j;
int len1, len2;
printf("第1の文字列を入力してください: ");
gets(str1);
printf("第2の文字列を入力してください: ");
gets(str2);
/*
* 文字列の長さを確認する
*/
/* NULL文字(文字列の最後)まで読み飛ばす */
for (len1 = 0; len1 < 80 && str1[len1] != '\0'; len1++)
;
/* ループ終了後、len1 に文字列の長さが入っている */
if (len1 < 80) {
printf("%s は %d 文字の長さです\n", str1, len1);
} else {
printf ("第1の文字列が80字以上あります\n");
}
/* str2 についても同様 */
for (len2 = 0; len2 < 80 && str2[len2] != '\0'; len2++)
;
if (len2 < 80) {
printf("%s は %d 文字の長さです\n", str2, len2);
} else {
printf ("第2の文字列が80字以上あります\n");
}
if (len1 < 80 && len2 < 80) {
for (i = 0; i < 80 && str1[i] != '\0' && str2[i] != '\0' && str1[i] == str2[i]; i++)
;
if (str1[i] == str2[i]) { /* 両者同時に == '\0' のはず*/
printf("文字列は等しい\n");
} else if (str1[i] < str2[i]) { /* str1[i] == '\0' のはず*/
printf("%s は %s より小さい\n", str1, str2);
} else { /* str2[i] == '\0' のはず*/
printf("%s は %s より大きい\n", str1, str2);
}
}
/*
* 十分なスペースがあれば、str2をstr1の最後に連結する
*/
if (len1 + len2 < 80) {
/* str1 の末尾を探す */
for (i = 0; str1[i] != '\0'; i++)
;
/* ループを抜けた段階では i は len1 と同じはずなので、
上記のループを作らず、i の代わりに len1 を用いるのも可 */
/* それ以降に str2 の中身をコピーする */
for (j = 0; str2[j] != '\0'; j++) {
str1[i+j] = str2[j];
}
str1[i+j] = '\0';
printf("%s\n", str1);
} else {
printf ("文字列をつなげた長さが80字以上あります\n");
}
/*
* str2をstr1にコピーする
*/
if (len1 + len2 < 80) {
for (i = 0; str1[i] != '\0'; i++) {
str1[i] = str2[i];
}
str1[i] = '\0';
printf("%s %s\n", str1, str2);
}
return 0;
}
お礼
丁寧にありがとうございました。 逆に削除しない文字だけを積み上げるということですね。 これが一番簡単ですね。