2014-01-13 6 views
0

문자열 "abcd1234efgh"가 있다고 가정 해 봅시다. 길이 4의 하위 문자열로 분할하고 싶습니다. abcd efgh문자열을 C에서 특정 크기의 문자열로 분할

My C는 녹슬니다. 다음은 내가 작성한 것입니다 :

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

int main(void){ 

int i,j; 
char values[32]="abcd1234efgh"; 
char temp[10]; 

for(i=0;values[i]!='\0';){ 
    for (j=0;j<4;j++,i++){ 
     temp[i]=values[j]; 
     printf("%c\n",values[j]); 
    } 
printf("string temp:%s\n",temp); 
} 

return 0; 
} 

원본 문자열의 색인을 저장하지 않기 때문에 출력이 분명히 잘못되었습니다. 이 문제를 해결하는 방법에 대한 도움말? 길이가 4의 배수가 아닌 문자열의 경우 짧은 부분 문자열에 공백을 넣고 싶습니다.

+0

온도는 4 개 문자를 누르고 필요가있다. 왜냐하면 지금은 매 반복마다 처음 4자를 얻습니다. 바꾸어 말하면 처음 4 번을 다시 설정하고 추가합니다. 내가 원하는 것은 처음 4 개를 얻고 다음 4 개를 가져 와서 다른 버퍼에 먹일 수있게하는 것입니다. – SamSong

답변

3

이 트릭을 할해야 4의 그룹과 뭔가 다른 (도), 그때 생각 하는데요 :

int len = strlen(values); 
for (int off = 0; off < len; off += 4) 
{ 
    strncpy(temp, values+off, 4); 
    temp[4] = '\0'; 
    …do as you will with temp… 
} 
+0

좋은 대답, 고마워요. – SamSong

0

참고 : 코드는 4 그룹에 인쇄되지 깨고 문자열을 저장하는 경우 크기가 4

이것은 당신이이 트릭을 할해야

#include<stdio.h> 
#include<string.h> 
int main(void) 
{ 
int i; 
char values[32]="abcd1234efgh"; 
for(i=0;values[i]!='\0';) 
{ 
    if(i % 4 == 0) printf("\n"); 
    printf("%c",values[i]); 
} 
return 0; 
} 

을 위해 무엇을 요구하는 경우

int len = strlen(values); 
for (int off = 0; off < len; off += 4) 
    printf("%.4s\n", values+off); 

을 당신이 원하는 경우에만 인쇄하고자하는 경우

+0

사소한 문제점 중 하나는 'values'의 문자 수가 4의 배수가 아닌 경우 출력이 줄 바꿈으로 끝나지 않는다는 것입니다. –

+0

개미 문제가 없어야합니다. 루프가 끝난 후 개행 문자를 추가하면 문제가 해결되지 않았습니다. – dips

+0

해결책과 함께 동일한 오류가 발생합니다. – dips

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

int main(void){ 

int i,j; 
char values[32]="abcd1234efgh12"; 
char temp[10]; 

for(i=0;values[i]!='\0';){ 
    for (j=0;j<4;j++,i++){ 
     temp[j]=values[i]; 
    } 
    while(j<4) 
    { 
     temp[j]=' '; 
    } 
    temp[j]='\0'; 
printf("string temp:%s\n",temp); 
} 

return 0; 
} 
+0

누구나 의견을 남길 수 있습니다. 왜이 대답을 투표로 대답하는지 설명하십시오. – michaeltang

+0

아마도이 프로그램에는 잠재적 인 버그가 있습니다. 나는 아래에서 주목했다. (1)'while (j <4)'이것은 작동하지 않습니다. (2) values ​​[i]! = '\ 0'이 여기 저기 복사됩니다. – BLUEPIXY

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

int main() { 
    char *str = "abcd1234efgh"; 
    size_t sub_len = 4; 
    size_t len = strlen(str); 
    size_t n = len/sub_len; 
    if(n * sub_len < len) 
     n += 1; 

    char temp[n][sub_len+1]; 
    int i; 
    for (i = 0; i < n; ++i){ 
     strncpy(temp[i], str + i*sub_len, sub_len); 
     temp[i][sub_len]='\0'; 
     printf("string temp:%s\n", temp[i]); 
    } 
    return 0; 
} 
관련 문제