2015-01-09 2 views
-3

"/"앞에 다른 문자열 값으로 변경해야하는 문자열이 내 프로그램에 있습니다.구분 기호를 확인하여 문자열에 문자를 추가하는 방법은 무엇입니까?

소스 문자열 : QoS를 트리/output_rate 대상 문자열 : QoS를 트리-2/output_rate

#include <stdio.h> 
#include <string.h> 

void append(char* s, char c) 
{ 
     int len = strlen(s); 
     s[len] = c; 
     s[len+1] = '\0'; 
} 

int main(void) 
{ 
     char str[256] = "qos-tree/output_rate"; 
     char c = "a"; 

     append(str, c); 

     printf("%s\n", str); 
     return 0; 
} 

이 내가 논리가 잘못된 기다려요 누구 가이드 생각, 지금까지 한 일이다 나는 그것을 바로 잡을 수 있습니까? 실행이 완료되면 소스 문자열의 앞에 "-2"가 있어야합니다. "/"

+0

아무것도 없다 "-2". 또한 논리에서 슬래시를 찾지 않습니다. 먼저 두 가지를 모두 고치는 것이 좋습니다. – usr2564301

+1

in-place에서 원한다면 오른쪽에있는 2 글자 뒤에 /, memmove를 찾아 "-2"를 추가하십시오. Protip : '/'를 찾아서 시작하십시오. – tux3

+0

'char c = 'a'시도해보십시오. – francis

답변

2
void insert_before_ch(char *s, const char *ins, char c){ 
    char *p = strchr(s, c); 
    if(p){ 
     size_t len = strlen(ins); 
     memmove(p + len, p, strlen(p)+1); 
     memcpy(p, ins, len); 
    } 
} 

int main(void){ 
    char str[256] = "qos-tree/output_rate"; 

    insert_before_ch(str, "-2", '/'); 

    printf("%s\n", str); 
    return 0; 
} 
2

시도 할 때 슬래시를 찾지 않고 "-2"가 표시되지 않습니다.

대신을 시도해보십시오

#include <stdio.h> 
#include <string.h> 

void append(char* s, char del, char* substring) { 
    char origin[256]; 
    strcpy(origin, s); 
    int i = 0, j = 0, z = 0; 

    for(; origin[i]; ++i) { 
    if(origin[i] != del) { 
     s[j++] = origin[i]; 
    } else { 
     for(; substring[z]; ++z) { 
     s[j++] = substring[z]; 
     } 
     s[j++] = origin[i]; 
    } 
    } 
    s[j] = '\0'; 
} 

int main(void) { 
    char str[256] = "qos-tree/output_rate"; 
    char del = '/'; 
    char* substring = "-2"; 

    append(str, del, substring); 

    printf("%s\n", str); 
    return 0; 
} 

논리는 함수 내에서 우리가 배열의 실제 내용을 기억 origin 배열을 사용하고 우리가 main()의 실제 배열 인 (sorigin 복사이다). 구분 기호 del을 찾으면 그 위치에 substring을 복사하고 복사를 계속합니다.


결과의 문자열을 저장할 수있는 길이 여야합니다. 이 경우입니다. 이 char c = 'a'; 때문에 c로 교체해야 모든 Thist 관련 char c = "a"의 첫

+0

** 참고 ** : 배열 길이가 충분하지 않으면이 코드가 작동하지 않습니다. –

+0

물론 @iharob. 초보자를위한 좋은 지적이지만, 나는 그것을 편집으로 써야합니다. 고마워, 멋진 답변, +1. – gsamaras

1

는 문자가 아닌 문자열 문제 내가 정말 코드가 함께하고있는 것 사이의 관계를 표시하지 않은 경우와

무엇인지 당신은 당신이하고 싶었던 말했지만, 여기에 코드 조각 나는 생각한다, 당신이 원하는 것을 달성하기 위해 :이

#include <string.h> 
#include <stdio.h> 
#include <stdlib.h> 




void append(char* str , char c) 
{ 
    char firststr[60]; 
    char therest[30]; 
    strcpy(firststr , strtok(str , "/")); 
    strcpy(therest , strtok(NULL , "/")); 
    strcat(firststr , &c); 
    strcat(firststr , "/"); 
    strcat(firststr , therest); 
    strcpy(str , firststr); 
} 
int main(void) 
{ 
    char str[60] = "qos-tree/output_rate"; 
    char c = '2'; 

    append(str , c); 
    printf("%s\n" , str); 
} 

당신은 내가이 당신이 배열의 크기를 수정할 수 있습니다 싶었던 것입니다 생각 이동 에 내가 문자열에 문자를 삽입하는 결과 문자열이 더 큰 것 때문에, 동적 할당하여 기능을 작동하게해야한다고 생각 귀하의 요구에

1

에 맞게, 그래서 이것은 당신의 "논리"삽입에 내 제안

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 

void insert(char **str, char chr, unsigned int position) 
{ 
     int length; 
     char *ptr; 

     if (str == NULL) 
       return; 
     length = strlen(*str); 
     if (position >= length) 
       return; 
     ptr = realloc(*str, 2 + length); 
     if (ptr == NULL) 
       return; 
     *str = ptr; 

     memmove(ptr + position + 1, ptr + position, length - position + 1); 
     ptr[position] = chr; 
} 

int main(void) 
{ 
     const char *source = "qos-tree/output_rate"; 
     size_t  length = strlen(source); 
     char  *str = malloc(1 + length); 

     if (str == NULL) 
       return -1; 
     strcpy(str, source); 

     insert(&str, '-', 8); 
     insert(&str, '2', 9); 

     printf("%s\n", str); 

     free(str); 
     return 0; 
} 
관련 문제