c言語のポインタの課題がよくわからなくて困っています

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

c言語のポインタの課題がよくわからなくて困っています

#1

投稿記事 by OP-GG » 8年前

課題として、二つの文字列を入力したあと二つのポインタを使って文字列をいれかえよというものです。
考えたのですがstrcpyも使えるのかと思ったのですが、どのようにポインタを利用すればいいのかわかりません。

コード:

#include<stdio.h>
int main(void){
char x[128],y[128];
char *s,*t;
printf("1つ目の文字列を入力してください : ");
scanf("%s",x);
printf("2つ目の文字列を入力してください : ");
scanf("%s",y);
入力させるまでは組めるのですがその先がわかりません。ご教授おねがいします。

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

Re: c言語のポインタの課題がよくわからなくて困っています

#2

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

こんな感じでしょうか?

コード:

#include<stdio.h>
int main(void){
	char x[128],y[128];
	char *s,*t;
	printf("1つ目の文字列を入力してください : ");
	scanf("%s",x);
	printf("2つ目の文字列を入力してください : ");
	scanf("%s",y);

	s = x;
	t = y;
	/* 共通部分 */
	while (*s != '\0' && *t != '\0'){
		/* 交換する */
		char b;
		b = *s;
		*s = *t;
		*t = b;
		s++;
		t++;
	}
	if (*s != '\0'){
		/* 交換前の1つ目の文字列の方が長い場合 */
		*t++ = *s; /* 1つ目の文字列から2つ目の文字列に1文字コピー */
		*s++ = '\0'; /* 交換後の1つ目の文字列をそこで終わりにする */
		while (*s != '\0'){ /* 残りの文字列をコピーする */
			*t++ = *s++;
		}
		*t = '\0';
	} else if (*t != '\0'){
		/* 交換前の2つ目の文字列の方が長い場合 */
		*s++ = *t; /* 2つ目の文字列から1つ目の文字列に1文字コピー */
		*t++ = '\0'; /* 交換後の2つ目の文字列をそこで終わりにする */
		while (*t != '\0'){ /* 残りの文字列をコピーする */
			*s++ = *t++;
		}
		*s = '\0';
	}

	puts(x);
	puts(y);
	return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

box
記事: 2002
登録日時: 13年前

Re: c言語のポインタの課題がよくわからなくて困っています

#3

投稿記事 by box » 8年前

こんな感じ?

コード:

#include <stdio.h>

#define N (128)

void printData(char *x, char *y)
{
    printf("%s\n", x);
    printf("%s\n", y);
}

void replaceData(char **x, char **y)
{
    char *t;

    t = *x, *x = *y, *y = t;
}

int main(void)
{
    char x[N], y[N], *s, *t;

    printf("1つ目の文字列:"), scanf("%s", x), s = x;
    printf("2つ目の文字列:"), scanf("%s", y), t = y;

    printf("入れ替え前:\n");
    printData(s, t);
    replaceData(&s, &t);
    printf("入れ替え後:\n");
    printData(s, t);
    return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

かずま

Re: c言語のポインタの課題がよくわからなくて困っています

#4

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

OP-GG さんが書きました:入力させるまでは組めるのですがその先がわかりません。ご教授おねがいします。
多くの人がお願いに応えていますよ。
OP-GGさん、わかったのなら、どれをどう理解したのか述べて解決を。
分からなかったのなら質問をお願いします。

別解です。

コード:

#include <stdio.h>  // scanf, puts

int main(void)
{
    char s1[256], s2[256], *p1 = s1, *p2 = s2, t;

    if (scanf("%255s%255s", s1, s2) != 2) return 1;

    do t = *p1, *p1 = *p2, *p2++ = t; while (*p1++ && t);
    if (p1[-1]) while (*p1++ = *p2++) ;
    else if (t) while (*p2++ = *p1++) ;

    puts(s1);
    puts(s2);
    return 0;
}

閉鎖

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