假设我有一个字符串“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的倍数的字符串,我想用空格填充短子字符串。
答案 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;
}