C语言如何将一个字符串按照规定长度分解为几个字符串

大概题目为9个字符为一组,每组第一个字符作为标志位,后面8个为地址。如果标志位为0,则将地址逆序,如果为1,则不变。输入说明:给订一个字符串中包含多组字符,中间没有空格。输出说明:输出最后的地址,每组用空格隔开。求大神给出C语言代码

按题意,字符串之间没有空格,那么用指针循环每次跳一个分组长度来取每个分组,同时判断是0开头还是1开头,决定数组正取还是反取。

#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define size 9//每组字符串长度
int main()
{
    char str[100]="041FF820010028FF24083FF8200",**adds=NULL,*p=str,*p1=NULL;
    int i,j,len=strlen(str),n,m;
    n=len/size;
    printf("字符串:%s\n",str);
    adds=(char **)malloc(sizeof(char *)*n);
    if(!adds)
        return 1;
    for(i=0;i<n;i++)
    {
        adds[i]=(char *)malloc(sizeof(char)*size);
        if(!adds[i])
            return 1;
        memset(adds[i],0,sizeof(char)*size);

        if(*p=='0')//首字母0,反向取
        {
            p1=p+(size-1);
            m=size-1;
            j=0;
            while(m--)
            {
                adds[i][j++]=*p1;
                p1--;
            }
        }
        if(*p=='1')//首字母1,正向取
        {
            p1=p+1;
            m=size-1;
            j=0;
            while(m--)
            {
                adds[i][j++]=*p1;
                p1++;
            }
        }
        p+=size;

    }
    printf("每组地址为:\n");
    for(i=0;i<n;i++)
        printf("%s\n",adds[i]);
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-04-10

C语言实现一个字符串的输入、解析、转置并输出(注:最后一组不足9个字符的情况不做解析),参考代码如下:

#include<stdio.h>
#include<string.h>
#define N 9
void reverse(char *str,int n)
{
    char t;
    int i;
    for(i=0; i<n/2; ++i)
        t=str[i],str[i]=str[n-i-1],str[n-i-1]=t;
}
int main()
{
    char str[300];
    char buf[N+1];
    char substr[N];
    char ch,*p=str;
    int i;
    gets(str);
    while(1) {
        for(i=0; i<N; ++i) {
            if(p[i]=='\0') break;
            buf[i]=p[i];
        }
        if(i!=N) break;
        p+=N;
        buf[N]='\0';
        sscanf(buf,"%c%s",&ch,substr);
        if(ch=='0')
            reverse(substr,N-1);
        printf("%s ",substr);
    }
    return 0;
}

追问

感谢回答,但是还有一处没太看懂想请教您。请问p+=N表示的是什么意思呢?

追答

p+=N等价于p=p+N
比如以上的运行结果:
012345678123456789...
初始时p指向字符串的第一个字符0;
第一组字符(012345678)处理完毕后,
p=p+9,p又指向字符1,然后开始处理第二组字符(123456789);
以此类推。。。

本回答被提问者采纳
相似回答