char *message = "hello#world#####.......";
어떻게 모든 "#"을 삭제하고 "helloworld를"를 반환 할 문자열이있다?
루비에서 내가 C에서
char *message = "hello#world#####.......";
어떻게 모든 "#"을 삭제하고 "helloworld를"를 반환 할 문자열이있다?
루비에서 내가 C에서
처리 할 GSUB 사용할 수 있습니다, 당신은 스스로를해야한다. 예를 들면 다음과 같습니다.
#include <string.h>
char *remove_all(const char *source, char c)
{
char *result = (char *) malloc(strlen(source) + 1);
char *r = result;
while (*source != '\0')
{
if (*source != c)
*r++ = *source;
source++;
}
*r = '\0';
return result;
}
호출자는 결과 문자열을 확보해야합니다.
나는 이것을하기위한 더 좋은 알고리즘이 있다고 믿는다 .... 자유는 필요 없다 - 그것은 제자리에있다.
char *remove_all(char *string, char c)
{
int idx = 0;
char *beg = string;
while(*string) {
if (*string != c)
beg[idx++] = *string;
++string;
}
beg[idx] = 0;
return beg;
}
질문에 'char *'가 안전하게 쓰여지지 않는 문자열 리터럴을 가리 키도록 초기화됨을 알 수 있습니다. 그래서 예, 결과를 저장하기 위해 메모리를 할당해야합니다. –
사실, 서명에는 char *가 필요하고 const char *는 필요하지 않습니다. C는 문자열 리터럴을 char *로 전달할 수 있지만, 다시 말하면 최종 사용자는 자신이 무엇을하고 있는지를 알고 있다고 가정합니다. 그러나 동의했다 - 당신은 문자열 리터럴에 전혀 쓸 수 없다. – tperk
확인 된 답변과는 대조적으로 좋고 명확한 코드. –