2014-01-13 105 views
0

一定规模的字符串比方说,我有一个字符串“abcd1234efgh”。我想分裂成长度为4的子字符串,如: abcd efgh分割字符串转换成用C

我的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。我想要的是获得前四个,然后是后四个等,以便我可以将它们馈送到另一个缓冲区。 – SamSong

回答

3

这应该做的伎俩,如果你正在寻找只打印:如果你想要做

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

别的东西(以及)与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; 
} 

这应该做的伎俩

+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; 
}