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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

参考技术A

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);
以此类推。。。

本回答被提问者采纳

JS javascript如何按照一定长度切割字符串。

比如:
var str="春运热潮带动下,一些互联网企业也纷纷推出 “抢票软件”,据说能增加买到车票的概率,引来无数网友下载。对此,相关部门提醒市民谨慎使用,以防个人信息被盗。"
按照没长度为10进行切割。

可以用substring或者substr截取字符串。

详解:
substring 方法用于提取字符串中介于两个指定下标之间的字符。
语法:stringObject.substring(start,end)
start:必需。一个非负的整数,规定要提取的子串的第一个字符在 stringObject 中的位置。
stop:可选。一个非负的整数,比要提取的子串的最后一个字符在 stringObject 中的位置多 1。如果省略该参数,那么返回的子串会一直到字符串的结尾。
返回值:一个新的字符串,该字符串值包含 stringObject 的一个子字符串,其内容是从 start 处到 stop-1 处的所有字符,其长度为 stop 减 start。
注意:
substring 方法返回的子串包括 start 处的字符,但不包括 end 处的字符。
如果 start 与 end 相等,那么该方法返回的就是一个空串(即长度为 0 的字符串)。
如果 start 比 end 大,那么该方法在提取子串之前会先交换这两个参数。
如果 start 或 end 为负数,那么它将被替换为 0。

substr 方法用于返回一个从指定位置开始的指定长度的子字符串。
语法:stringObject.substr(start ,length)
start:必需。所需的子字符串的起始位置。字符串中的第一个字符的索引为 0。
length 可选。在返回的子字符串中应包括的字符个数。
注意:

如果start为负数,则start=str.length+start。
如果 length 为 0 或负数,将返回一个空字符串。
如果没有指定该参数,则子字符串将延续到stringObject的最后。
参考技术A   var str = '春运热潮带动下,一些互联网企业也纷纷推出 “抢票软件”,据说能增加买到车票的概率,引来无数网友下载。对此,相关部门提醒市民谨慎使用,以防个人信息被盗。';
  var flag = 10;
  var arr = [];
  var count =0;
  for(var i=0,len=str.length/10;i<len;i++)
  str1 = str.substr(0,10);
  str = str.replace(str1,'');
  alert(str1);
  本回答被提问者采纳
参考技术B var str = "春运热潮带动下,一些互联网企业也纷纷推出“抢票软件”,据说能增加买到车票的概率,引来无数网友下载。对此,相关部门提醒市民谨慎使用,以防个人信息被盗。"

var strArr = [];

var n = 10;

for (var i = 0, l = str.length; i < l/n; i++)

var a = str.slice(n*i, n*(i+1));

strArr.push(a);


console.log(strArr);
参考技术C 长度为10,是指10个字符么?切割是什么意思呢?按照我的理解:

var str="春运热潮带动下,一些互联网企业也纷纷推出 “抢票软件”,据说能增加买到车票的概率,引来无数网友下载。对此,相关部门提醒市民谨慎使用,以防个人信息被盗。";
var f = 10, arr = [], i = 0, le = str.length/f;
while(i<le)
var strs = str.substr(0,f);
str = str.substring(10);
arr.push(strs);
i++;

arr.join('&&&&');//用‘&&&&’分割的

以上是关于C语言如何将一个字符串按照规定长度分解为几个字符串的主要内容,如果未能解决你的问题,请参考以下文章

将字符串列拆分为几个虚拟变量

c语言中如何输入一个没有长度的数组

如何将一个大数组按照里面相同的数据拆分成多个子数组

编程思想亮晶晶

[51nod1138]正整数分解为几个连续自然数之和

《C程序设计语言》笔记 (十四) 参考手册6