2013-06-20 2 views
-4

에서 첫 번째 문자를 제거 나는 문자가 *이 데이터 "ASD : asdsa"이있는 나는 전에 내용을 제거 할문자 *

':'문자를. 어떻게 할 수 있습니까? 포인터를 움직일 필요가있는 추악한 제안을 보았지만 그렇게하고 싶지 않습니다.

몇 가지 제안 사항을 알고 계십니까?

+9

"하지만를 [당신은] 돼요 하기 위해서?" 우리가 제안하는 대안 솔루션을 원한다는 것을 어떻게 알 수 있습니까? 이 솔루션에 무엇이 잘못되었는지 알려주십시오. 동일한 결함으로 고통받는 답변을 작성하는 데 시간을 낭비하지 않도록하십시오. –

+1

가끔 STL 문서를 읽고 있는데 기능이 긴 이름을 가지고 있으며 '나는 그다지 입력하지 않아야합니다'와 같은 것입니다. 스탠드 오프는 오랫동안 계속되지만 일반적으로 컴퓨터가 승리합니다. – Salgar

답변

8

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" 수단 : 후의 문자열을 반환한다.

Online Demo.

+4

'std :: string'은 C에 존재하지 않습니다. – Fanael

+2

@Fanael 이전에는'C++ '로 태그되었습니다. 이제는 'C'로 바뀝니다. – Mahesh

+0

@Mahesh :하지만 더 이상은 아닙니다! – Fanael

1

당신은 "못생긴"솔루션없이 제거 할 수 없습니다를 참조하십시오.

하지만 문자열의 세 번째 대소 문자의 주소를 직접 사용할 수 있습니다.

printf("%s\n", &str[3]); 

예를

2

위해 나는 strchr의 혼합물을 말하고 싶지만 및 memmove 그것을해야한다.

char *res = strchr(str, ':'); 
if (res) 
    memmove(str, res + 1, strlen(res + 1) + 1); 
+0

'strcpy (res)'함수가 없습니다 ... –

+0

@KerrekSB 내 잘못 편집 됨. 감사합니다 –

+0

감사합니다 .. 나는 자유로운 입술을 삭제해야합니까? – soulslicer0

0

당신이 왜 std::string를 사용하지 않는 C++에있는 경우 포인터 함께 플레이해야 하겠지만 * 당신이 문자를 사용하고 있기 때문에?

1

당신은 데이터 만 위치를 읽을 가리키는 경우 strtok()

char mystr[] = "asd:asdasd"; 
char *split; 
int second = 0; 

split = strtok(mystr, ":"); 

    while (second < 2 && split != NULL) 
    { 
    split = strtok (NULL, ":"); 
    second++; 
    } 
puts(split); 
+2

Egads, 'strtok', 안돼! – Fanael

+0

질문은 C++입니다. – nouney

+0

@nouney LOL, 더 이상은 아닙니다 –

0

를 사용하려고 할 수 있습니다, 당신은 수정할 수 없습니다

어쨌든 당신은 숯불 *에 대한 않는 strstr를 사용할 수 있지만 당신은 포인터를 조작합니다 . std::string을 사용하면 쉽게 수행 할 수 있습니다.

std::string str("asd:asdsa"); 
size_t loc = str.find(':') + 1; 
str.erase (str.begin(), str.begin() + loc); 
+0

질문에 C 태그가 추가되었습니다 (또는 적어도 지금은!). – DaV

1

나와 즈가 이전에 말한대로 당신은 std::string을 사용해야하지만 원시 포인터를 사용하면 간단하게 my_data 사용할 수 있습니다

char* original_data = "asd:asdasd"; 
char* my_data = original_data + 4; // points to: "asdasd" 
1

사용하여 C 기능 :

#include <string.h> 

char *p = strchr(s, '.'); 

if (p != NULL) 
{ 
    memmove(s, p + 1, strlen(p)); 
}