首页 > 其他分享 >串的表示及基本操作

串的表示及基本操作

时间:2023-04-13 20:33:35浏览次数:28  
标签:表示 SqString int s2 s1 length 基本操作 data

【问题描述】

实现串的顺序表示和基本操作。

【输入形式】

第一行输入一个字符串;

第二行输入一个字符串;

第三行输入两个整数,分别表示在第一个字符串中获取子串的起始位置和长度;

【输出形式】

输出两个字符串比较的结果,若相等输出=,否则输出<>

输出子串(若子串获取不成功,输出error)

输出两个字符串的连接结果
【样例输入1】

123456

abcdefg

3 4
【样例输出1】

<>

3456

123456abcdefg

【样例输入2】

ABC

ABC

3 4
【样例输出1】

=

error

ABCABC

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAXSIZE 100

typedef struct {
	char *data;
	int length;
	int stringsize;
} SqString;

//串的初始化
int initString(SqString *s) {
	s->data = (char *)malloc(sizeof(char) * MAXSIZE);
	if (!s->data)
		return 0;
	s->stringsize = MAXSIZE;
	s->length = 0;
	return 1;





}

//串的复制
int strAssign(SqString *s, char *str ) {
	int i = 0;
	while (*str) {
		s->data[i++] = *str++;
	}
	s->data[i] = '\0';
	s->length = i;
	return 1;




}

//串的比较
int strCompare(SqString *s, SqString *t) {
	int i;
	for (i = 0; i < s->length && i < t->length; i++) {
		if (s->data[i] != t->data[i])
			return s->data[i] - t->data[i];
	}
	return s->length - t->length;






}

//取子串
int subString(SqString *sub, SqString *s, int pos, int len) {
	int i = 0;
	if (pos < 1 || pos > s->length || len < 0 || len > s->length - pos + 1) {
		return 0;
	}
	sub->length = 0;
	for (i = 0; i < len; i++) {
		sub->data[i] = s->data[i + pos - 1];
		sub->length++;
	}
	sub->data[i] = '\0';
	return 1;






}

//串的连接
int strConcat(SqString *s, SqString *s1, SqString *s2) {
	int i = 0, j = 0;
	if (s1->length + s2->length >= s->stringsize) {
		s->data = (char *)realloc(s->data, (s->stringsize + MAXSIZE) * sizeof(char));
		if (!s->data)
			return 0;
		s->stringsize += MAXSIZE;
	}
	while (i < s1->length) {
		s->data[i] = s1->data[i];
		i++;
	}
	while (j < s2->length) {
		s->data[i++] = s2->data[j++];
	}
	s->data[i] = '\0';
	s->length = s1->length + s2->length;
	return 1;





}

int main() {
	SqString s1, s2, t, s;
	int pos, n;
	char str[MAXSIZE];
	initString(&s1);
	initString(&s2);
	initString(&t);
	initString(&s);
	//读入一个字符串,复制给串s1
	scanf("%s", str);
	strAssign(&s1, str);
	//读入一个字符串,复制给串s1
	scanf("%s", str);
	strAssign(&s2, str);
	//比较s1和s2是否相等
	if (!strCompare(&s1, &s2)) {
		printf("=\n");
	} else {
		printf("<>\n");
	}
	//输入子串位置和长度,在s1中取子串并输出,取不到输出error
	scanf("%d%d", &pos, &n);
	if (subString(&t, &s1, pos, n)) {
		printf("%s\n", t.data);
	} else {
		printf("error\n");
	}
	//连接s1和s2,输出连接结果
	if (strConcat(&s, &s1, &s2))
		printf("%s", s.data);
	else
		printf("error\n");
	return 0;
}

标签:表示,SqString,int,s2,s1,length,基本操作,data
From: https://blog.51cto.com/u_16030624/6188354

相关文章

  • Git——基本操作
    Git基本操作Git的工作就是创建和保存你项目的快照及与之后的快照进行对比。本章将对有关创建与提交你的项目快照的命令作介绍。Git常用的是以下6个命令:gitclone、gitpush、gitadd 、gitcommit、gitcheckout、gitpull,后面我们会详细介绍。说明:workspace:工作区s......
  • 进制的各种标识符 进制的表示方式
    最长见的进制表达形式有,二进制,八进制,十进制,十六进制。他们之间的区别仅体现在标识符的不同。后缀区分:B、二进制H、十六进制O、八进制D、十进制前缀区分:0x:十六进制(零)0:八进制(零)0b:二进制(零) ......
  • (5)使用函数验证哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇和。输入两个正整数
    #include<stdio.h>#include<math.h>intprime(intm){  inti;  if(m<2)    return0;  for(i=2;i<=sqrt(m);i++){    if(!(m%i))      return0;  }  return1;}intmain(){  intm,n,flag;  printf("Enterm,......
  • 语法:英语中表示时间范围的介词——since、during、until/till、for
    since 一、本义:自从...以来We’vebeenwaitingheresincetwoo’clock.我们从两点钟开始就在这里等了Ihaven’tplayedrugbysinceIleftuniversity.我大学毕业后就没打过橄榄球IhaveneverbeenemployedsinceJanuary.我从一月以来未被雇用I'velivedhe......
  • 剑指 Offer 20. 表示数值的字符串
    题目链接:剑指Offer20.表示数值的字符串方法:模拟解题思路根据题意模拟,详情见代码注释。代码classSolution{public:boolisDecimal(strings){intfirst_symbol=s.find_first_of('.');//第一个'.'的位置intlast_symbol=s.find_last_of('.'......
  • mysql学习日记-02 数据表的基本操作
    一、创建和查看数据表创建数据表:前提要选择一个数据库,命令:USE数据库;CREATETABLE表名称(字段名数据类型,...);CREATETABLEuser(u_nameVARCHAR(10),u_ageint(3),u_sexVARCHAR(1)); 查看所有数据表SHOWTABLES; 查看已创建的数据表信息SHOWCREATETAB......
  • Python实现Json文件转为点表示法(Dot-Notation)
    将Json转换为点表示法有很多用途,本文基于Python实现一个简单demo来转换。【原文见我的博客,如有更新请博客园的不一定及时同步改:https://blog.jfz.me/2023/python-json-to-dot-notation.html】{"vehicle":{"car":{"bmw":true,"audi"......
  • 部门来了个拿25k出来的00后测试卷王,老油条表示真干不过,已被...
    内卷的来源内卷最早的“出处”是几张名校学霸的图片。大学生们刷爆朋友圈的几张“内卷”图片是这样的:有的人骑在自行车上看书,有的人宿舍床上铺满了一摞摞的书,有的人甚至边骑车边端着电脑写论文。这些图片最早在清华北大的学霸之间流传。之后,“边骑车边看电脑”的“清华卷王”等......
  • 【Java 并发】【九】【AQS】【八】ReentrantReadWriteLock 读写锁怎么表示
    1 前言接下来我们来看看ReentrantReadWriteLock读写锁,也是基于之前讲解的AQS来实现的,建立在AQS体系之上的一个并发工具类,这个锁很重要,在很多开源的中间件中使用的非常广泛,很多场景使用它来减少并发操作中的锁冲突,提升并发能力。2  ReentrantReadWriteLock介绍ReentrantRead......
  • Python-文件基本操作
    """coding:utf-8@Software:PyCharm@Time:2023/4/616:59@author:Panda"""#文件基础3步骤:打开文件,写入或读文件,关闭文件,文件打开必定要关闭(close())"""data='好的'data_str='abc'res=data_str.encode('utf-8&#......