에서 첫 번째 문자를 제거 나는 문자가 *이 데이터 "ASD : asdsa"이있는 나는 전에 내용을 제거 할문자 *
':'문자를. 어떻게 할 수 있습니까? 포인터를 움직일 필요가있는 추악한 제안을 보았지만 그렇게하고 싶지 않습니다.
몇 가지 제안 사항을 알고 계십니까?
에서 첫 번째 문자를 제거 나는 문자가 *이 데이터 "ASD : asdsa"이있는 나는 전에 내용을 제거 할문자 *
':'문자를. 어떻게 할 수 있습니까? 포인터를 움직일 필요가있는 추악한 제안을 보았지만 그렇게하고 싶지 않습니다.
몇 가지 제안 사항을 알고 계십니까?
C에서, 당신이 할 수 있습니다 :
char *newString = originalString + 4;
을 이제 당신이 그렇게 할 이유를 알려하지 않으려면. 문제를 말해주세요!
4
또는 다른 것 (런타임에만 알 수 있음)도 알 수없는 경우 루프를 사용하여 ':'
의 색인을 찾아 4
대신 사용하십시오. 그것은 쉬운 일입니다. 자신을보십시오. 행운을 빕니다. :-)
난 그냥 질문이 처음에 내가 쓴 C++로 태그 때문에 목적을 배우기 위해이 부분을 유지하고, 나는 그것이 ++ 가끔 C에서 작동하는 C 프로그래머를하는 데 도움이 생각합니다.
C++에서 std::string
은 문자열로 수행하는 작업을 단순화합니다. 이 코드
std::string s = "asd:asdsa"; //#include <string>
s = s.substr(s.find(':') + 1);
는 substr()
그 값 "asdsa"
수단 :
후의 문자열을 반환한다.
당신은 "못생긴"솔루션없이 제거 할 수 없습니다를 참조하십시오.
하지만 문자열의 세 번째 대소 문자의 주소를 직접 사용할 수 있습니다.
printf("%s\n", &str[3]);
예를
위해 나는 strchr
의 혼합물을 말하고 싶지만 및 memmove
그것을해야한다.
char *res = strchr(str, ':');
if (res)
memmove(str, res + 1, strlen(res + 1) + 1);
'strcpy (res)'함수가 없습니다 ... –
@KerrekSB 내 잘못 편집 됨. 감사합니다 –
감사합니다 .. 나는 자유로운 입술을 삭제해야합니까? – soulslicer0
당신이 왜 std::string
를 사용하지 않는 C++에있는 경우 포인터 함께 플레이해야 하겠지만 * 당신이 문자를 사용하고 있기 때문에?
를 사용하려고 할 수 있습니다, 당신은 수정할 수 없습니다
어쨌든 당신은 숯불 *에 대한 않는 strstr를 사용할 수 있지만 당신은 포인터를 조작합니다 . std::string
을 사용하면 쉽게 수행 할 수 있습니다.
std::string str("asd:asdsa");
size_t loc = str.find(':') + 1;
str.erase (str.begin(), str.begin() + loc);
질문에 C 태그가 추가되었습니다 (또는 적어도 지금은!). – DaV
나와 즈가 이전에 말한대로 당신은 std::string
을 사용해야하지만 원시 포인터를 사용하면 간단하게 my_data
사용할 수 있습니다
char* original_data = "asd:asdasd";
char* my_data = original_data + 4; // points to: "asdasd"
사용하여 C 기능 :
#include <string.h>
char *p = strchr(s, '.');
if (p != NULL)
{
memmove(s, p + 1, strlen(p));
}
"하지만를 [당신은] 돼요 하기 위해서?" 우리가 제안하는 대안 솔루션을 원한다는 것을 어떻게 알 수 있습니까? 이 솔루션에 무엇이 잘못되었는지 알려주십시오. 동일한 결함으로 고통받는 답변을 작성하는 데 시간을 낭비하지 않도록하십시오. –
가끔 STL 문서를 읽고 있는데 기능이 긴 이름을 가지고 있으며 '나는 그다지 입력하지 않아야합니다'와 같은 것입니다. 스탠드 오프는 오랫동안 계속되지만 일반적으로 컴퓨터가 승리합니다. – Salgar