課題として、二つの文字列を入力したあと二つのポインタを使って文字列をいれかえよというものです。
考えたのですがstrcpyも使えるのかと思ったのですが、どのようにポインタを利用すればいいのかわかりません。
入力させるまでは組めるのですがその先がわかりません。ご教授おねがいします。
c言語のポインタの課題がよくわからなくて困っています
Re: c言語のポインタの課題がよくわからなくて困っています
こんな感じでしょうか?
#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で殴ればいい!(死亡フラグ)
Re: c言語のポインタの課題がよくわからなくて困っています
こんな感じ?
#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言語のポインタの課題がよくわからなくて困っています
多くの人がお願いに応えていますよ。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;
}