코드를 바로 올려드리진 못하지만...
"홍길동입니다."라는 문자열의 시작지점을 배열의 위치나
포인터로 알 수 있다면 그 지점부터 해서 임의의 값을 덮어씌울 수 있지 않을까요...
ex) char *str = "hello world."에서 "world."라는 문자열이 존재한다면 이것을 char *path = "tempo"로 바꾸고 싶다.
-> world.의 시작 문자인 w의 배열 위치(str[6])를 체크
-> 해당 배열위치부터 임의의 값을 덮어씌우기.
물론 대치되는 문자열의 길이가 기존의 문자열보다 짧다면
뒷 부분의 문자열과 그대로 겹치는 문제점이 있습니다만...
제가 드릴 수 있는 아이디어는 이 정도겠네요...^^;
char *haystack = "long string
char *haystack = "long string ...";
char *needle = "abcde";
char *p = strstr(haystack, needle);
if (p)
printf("%s", p + strlen(needle));
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
감사드립니다,.
감사합니다.해결하였습니다.
그런데요. 하나만 더 질문해도될까요
만약에 c언어에서 특정 부분부터의 문자열
예를들면,
안녕하세요. 홍길동입니다.
이런부분이 있으면 "홍길동입니다." 이 부분만을 다른 문자열로 어떻게 대체할 수 있을지, 잘모르겠어서요.
char *data 여기에는 본 내용의 데이터가 들어있고.
char *p 여기에데이터는 "홍길동입니다" 이것을 대체할 다른 내용을 가지고 있습니다.
어떻게 대체해야할지 좀 알고싶습니다.
코드를 바로 올려드리진
코드를 바로 올려드리진 못하지만...
"홍길동입니다."라는 문자열의 시작지점을 배열의 위치나
포인터로 알 수 있다면 그 지점부터 해서 임의의 값을 덮어씌울 수 있지 않을까요...
ex) char *str = "hello world."에서 "world."라는 문자열이 존재한다면 이것을 char *path = "tempo"로 바꾸고 싶다.
-> world.의 시작 문자인 w의 배열 위치(str[6])를 체크
-> 해당 배열위치부터 임의의 값을 덮어씌우기.
물론 대치되는 문자열의 길이가 기존의 문자열보다 짧다면
뒷 부분의 문자열과 그대로 겹치는 문제점이 있습니다만...
제가 드릴 수 있는 아이디어는 이 정도겠네요...^^;
이렇게 생각해볼 수 있군요.
#include <stdio.h> #include <string.h> #define STR_LEN 100 void strrpl(char src[], const char from[], const char to[]); int main(void) { char src[STR_LEN] = "Hello, world! Nice to meet you, world!"; char from[STR_LEN] = "world"; char to[STR_LEN] = "monster"; printf("Origin: %s\n", src); strrpl(src, from, to); printf("Result: %s\n", src); return 0; } void strrpl(char src[], const char from[], const char to[]) { char tmp[STR_LEN]; char *ptr; unsigned long len = strlen(from); while ((ptr=strstr(src, from))) { strcpy(tmp, ptr+len); // from 이후의 문자열을 임시 배열에 복사 strcpy(ptr, to); // from이 나타난 위치에 to 문자열을 복사 strcat(src, tmp); // 원래 문자열 src의 뒤에 임시 배열 복사 } }이런 식으로 짜는 방법도 있습니다. 문자열의 길이에 대해서는 충분히 개선 가능하니 직접 해보세요.
저는 이렇게 생각했습니다.
답변감사합니다.
많은도움이됬습니다.!
댓글 달기