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
반응형