관리 메뉴

History

[C언어] 문자열 앞에 다른 패턴을 추가해야할 때 본문

C,C++/개념 실습 프로그래밍

[C언어] 문자열 앞에 다른 패턴을 추가해야할 때

luckybee 2022. 10. 26. 18:55
728x90
반응형

이미 저장된 문자열 앞에 사용자가 원하는 문구를 추가해야 할 때 

 

더보기

ex)

hello

world

!!!

 

-----변환-----

1. hello

2. world

3. !!!

코드는 아래와 같다.

#include<stdio.h>
int main()
{
    char str_table[3][16] = { "hello","world" ,"!!!" };
    for (int i = 0; i < 3; i++){
        printf("%s\n", str_table[i]);
    }
    char temp[3][20];
    for (int i = 0; i < 3; i++) {
        sprintf_s(temp[i], 20, "%d. %s", i+1, str_table[i]);  //문자열 합치기
    }

    for (int i = 0; i < 3; i++) {
        printf("%s\n", temp[i]);
    }
    return 0;
}

sprintf_s를 사용하면 기존에 있던 문자열을 합칠 수 있다.

 

그러나 메모리를 안 만들고 앞에 원하는 문자를 추가할 수 있는 방법을 원하는 사람들이 있을 수 도 있기에 아래와 같은 방법도 같이 소개하겠다. 

 

#include<stdio.h>
#include<string.h>

int main()
{
    char str_table[3][16] = { "hello","world" ,"!!!" };
    for (int i = 0; i < 3; i++){
        printf("%s\n", str_table[i]);
    }

    printf("-----변환-----\n");
    for (int i = 0; i < 3; i++) {
        memmove(str_table[i] + 3, str_table[i], strlen(str_table[i]));
		str_table[i][0]='1'+i;
		str_table[i][1] = '.';
		str_table[i][2] = ' ';
    }

    for (int i = 0; i < 3; i++) {
        printf("%s\n", str_table[i]);
    }
    return 0;
}

memmove함수는 따로 메모리를 할당하지 않고 기존에 있던 메모리를 사용자가 원하는 만큼 전체적으로 뒤로 밀어주는 함수이다. 

memmove(str_table[i] + 3, str_table[i], strlen(str_table[i]));

위와 같은 코드에서는 기존 str_table의 문자열 내용을 문자열 길이만큼 뒤로 3바이트 밀어주는 역할을 하고 있다.

결과는 아래와 같다.  

더보기

hello
world
!!!
-----변환-----
1. hello
2. world
3. !!!

 

728x90
반응형
Comments