.\a.out
์ ์ ์ธํ ์ฒซ๋ฒ์งธ argument์ ๋๋ฒ์งธ argument ์์์ ํ์ธ๋๋ ๊ฐ์ ๊ธ์๋ฅผ ์ถ๋ ฅํ๋ค. ddd
, fffffddfdfdfd
).\a.out "first_argument", "second_argument"
Assignment name : inter
Expected files : inter.c
Allowed functions: write
--------------------------------------------------------------------------------
Write a program that takes two strings and displays, without doubles, the
characters that appear in both strings, in the order they appear in the first
one.
The display will be followed by a \n.
If the number of arguments is not 2, the program displays \n.
Examples:
$>./inter "padinton" "paqefwtdjetyiytjneytjoeyjnejeyj" | cat -e
padinto$
$>./inter ddf6vewg64f gtwthgdwthdwfteewhrtag6h4ffdhsd | cat -e
df6ewg4$
$>./inter "rien" "cette phrase ne cache rien" | cat -e
rien$
$>./inter | cat -e
$
int i
๋ ์ฒซ๋ฒ์งธ argument์์ ์ปค์์ฒ๋ผ ์์ง์ผ ์์ ์ด๋ค.int j
๋ ๋๋ฒ์งธ argument์์ ์ปค์์ฒ๋ผ ์์ง์ผ ์์ ์ด๋ค.static int tab[256]
: (union subject๊ณผ ๊ฐ์ด) ascii ํ
์ด๋ธ์ static int tab[256]
static ์ผ๋ก ์ฌ์ฉํด ์ค์ผ๋ก์จ, default ๊ฐ์ 0์ผ๋ก ํ์ฌ, 0์ผ๋ก ํ
์ด๋ธ์ ์ฑ์ ๋ค. if (tab[(int)av[1][i]])
์์ ๋ค์ด๊ฐ๋ค.tab[(int)av[1][i]] == 0
: tab์ ์ด์ฉํ์ฌ, argument์ ๋ฌธ์๋ฅผ ํ๋ํ๋์ฉ ํ์ธํ๋ ๊ณผ์ ์ด๋ค.(0 =switch off)tab[(int)av[1][i]] = 1
table์ 1์ ์จ์ฃผ๊ณ (1 = switch on) ์ ์จ์ฃผ๊ณ if loop ์ ๋์จ๋ค.j++
์ i++
๋ฅผ ํด์ฃผ๋ฉด์, ์๊ธฐ์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ณ์ ํ
์คํธ ํด์ค๋ค, while loop์ ๋์จ๋ค. if (av[1][i] == av[2][j])
{
if (tab[(int)av[1][i]] == 0)
{
write(1, &av[1][i], 1);
tab[(int)av[1][i]] = 1;
}
}
๐ก table ์๋ฆฌ ์ดํด ๋ฐฉ๋ฒ (switch off/on)
์ฆ, 256๊ฐ์ table ์์ 0์ผ๋ก ๊ฝ ์ฐจ์๋๋ฐ (switch off ์ํ), ์ฒซ๋ฒ์งธ argument๊ณผ ๋๋ฒ์งธ argument์ ๋์์ ๋ํ๋๋ ๋ฌธ์๋ฅผ 1๋ก ์จ์ฃผ๋ฉด์ table์ switch on ์ํ๋ก ๋ง๋ค์ด์ค ๋ค, ์ต์ข ์ ์ผ๋ก switch on ์ ํด๋นํ๋ ๋ฌธ์๋ค์ ์ถ๋ ฅํ์ฌ ๋ฆฌํดํ๋ค.
#include <unistd.h>
int main(int ac, char *av[])
{
int i;
int j;
static int tab[256];
if (ac == 3)
{
i = 0;
while (av[1][i])
{
j = 0;
while (av[2][j])
{
if (av[1][i] == av[2][j])
{
if (tab[(int)av[1][i]] == 0)
{
write(1, &av[1][i], 1);
tab[(int)av[1][i]] = 1;
}
}
j++;
}
i++;
}
}
write(1, "\n", 1);
return (0);
}