在C中将字符串拆分为一定大小的字符串

时间:2014-01-13 05:34:38

标签: c string

假设我有一个字符串“abcd1234efgh”。我想将它拆分为长度为4的子串,如: A B C D 1234 EFGH

我的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的倍数的字符串,我想用空格填充短子字符串。

4 个答案:

答案 0 :(得分: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…
}

答案 1 :(得分: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;
}

这应该可以解决问题

答案 2 :(得分: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;
}

答案 3 :(得分:-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;
}