数据结构c语言的串函数 C语言数据结构串

数据结构用C语言写的串怎么写主函数

/*

成都地区优秀IDC服务器托管提供商(创新互联).为客户提供专业的德阳服务器托管,四川各地服务器托管,德阳服务器托管、多线服务器托管.托管咨询专线:13518219792

串a:

abcdefghijklmnopqrstuvwxyz

串b:

01234567890123456789

串a:

abcdefghijklmnopqrstuv012345678901234567

串c:

abcdefghijklmnopqrstuvwxyz

Press any key to continue

*/

#include stdio.h

#define MAXLEN 40

typedef struct {

char ch[MAXLEN];

int len;

}SString;

void StrInsert(SString *s,int pos,SString t) {

int i;

if(pos  0 ) pos = 0;

if(pos  s-len - 1) pos = s-len;

if(s-len + t.len = MAXLEN) { // 长度适中

for(i = s-len + t.len - 1;i  pos;i--)

s-ch[i] = s-ch[i - t.len];

for(i = 0;i  t.len;i++) s-ch[i + pos] = t.ch[i];

s-len += t.len;

}

else if(pos + t.len  MAXLEN) { // 长度超限1,从pos后不再有s的内容

for(i = pos;i  MAXLEN; ++i)

s-ch[i] = t.ch[i - pos];

s-len = MAXLEN;

}

else { // 长度超限2,从pos + t.len后还有s的部分内容

for(i = MAXLEN - 1; i = pos + t.len; --i)

s-ch[i] = s-ch[i - t.len];

for(i = 0; i  t.len; ++i)

s-ch[i + pos] = t.ch[i];

s-len = MAXLEN;

}

}

// 在s中从pos位置开始删除len个字符

int StrDelete(SString *s,int pos,int len) {

int i;

if(pos  0 || pos  s-len) return 0;

if(pos + len  s-len) { // 删除s的中间部分

for(i = pos;i  pos + len;i++)

s-ch[i] = s-ch[i + len];

s-len -= len;

}

else { // len太大

s-len = pos;

}

return 1;

}

SString StrCopy(SString *s,SString t) {

int i;

for(i = 0;i  t.len;i++) s-ch[i] = t.ch[i];

s-len = t.len;

return *s;

}

int StrEmpty(SString s) {

if(s.len == 0) return 1;

return 0;

}

int SteCompare(SString s,SString t) {

int i;

for(i = 0;i  s.len  i  t.len;i++)

if(s.ch[i] != t.ch[i]) return (s.ch[i] - t.ch[i]);

return (s.len - t.len);

}

int SteLength(SString s) {

return s.len;

}

void StrClear(SString s) {

s.len = 0;

}

void StrShow(const SString s) {

int i;

for(i = 0; i  s.len; ++i)

printf("%c",s.ch[i]);

printf("\n");

}

int main() {

SString stra = {"abcdefghijklmnopqrstuvwxyz",26};

SString strb = {"01234567890123456789",20},strc;

StrCopy(strc,stra);

printf("串a:\n");

StrShow(stra);

printf("串b:\n");

StrShow(strb);

StrInsert(stra,22,strb); //

printf("串a:\n");

StrShow(stra);

printf("串c:\n");

StrShow(strc);

return 0;

}

C语言(数据结构)字符串赋值函数求改错!~!~!!~

错误有:

1.if(t.ch) free(t.ch);有问题,因为t.ch没有赋初值,在主函数中应加上t.ch=NULL;

2.hstring *t;和Status strassign(hstring t,char *chars)调用t时形式不匹配,指针和引用,可改为:hstring t;或Status strassign(hstring *t,char *chars)

3.在strassign函数中的t.length=i;后加上t.ch[i]='\0';串结束标志。

4.strassign函数要有返回值。

你运行下面修改后的程序

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

#define MAXSTRLEN 256

#define MAXSTRSIZE 256

#define TRUE 1

#define FALSE 0

#define ERROR 0

#define OVERFLOW -2

typedef int Status;

typedef struct {char *ch;

int length;

}hstring;

Status strassign(hstring t,char *chars){

//生成一个其值等于串常量chars的串t

int i,j;

if(t.ch) free(t.ch);

i=strlen(chars);

if(!i) { t.ch=NULL; t.length=0; }

else{

if(!(t.ch=(char *)malloc(i*sizeof(char))))

exit(OVERFLOW);

for(j=0;ji;j++)

t.ch[j]=chars[j];

t.length=i;

t.ch[i]='\0';

}

return TRUE;

}

void main()

{ hstring t;

int i;t.ch=NULL;

char s[80]="vamos argentina.\n";

strassign(t,s);//32行

for(i=0;t.ch[i]!='\0';i++) printf("%c",t.ch[i]);}//33行

求解数据结构c语言中串的问题

(如果I和m之间只有一个'号,没有空格的话)

长度应该为13

SubString(s1,8,5)的结果是tuden,(意思是说从第8个字符开始,拿出5个字符)

index(s1,'u')的功能是在字符串中s1查找目的字符u,如果找到了,就返回u的位置值,没有找到就返回0。s1中有u这个字符,位置为9,所以结果为9

Replace(s1,’stidemt’,s3) 格式有问题;

replace(s,start,t,v),即要求在主串s中,从位置start,开始查找是否存在子串t,若主串s中存在子串t,则用子串v替换子串t 且函数返回1,若主串s中不存在子串t,则函数返回0.

C语言关于字符串的操作函数有哪些

string.h头文件中包含的字符串函数

void *memcpy(void *dest, const void *src, size_t n);//将n字节长的内容从一个内存地址复制到另一个地址;如果两个地址存在重叠,则最终行为未定义

void *memmove(void *dest, const void *src, size_t n);//将n字节长的内容从一个内存地址复制到另一个地址;与memcpy不同的是它可以正确作用于两个存在重叠的地址

void *memchr(const void *s, char c, size_t n);//在从s开始的n个字节内查找c第一次出现的地址并返回,若未找到则返回NULL

int memcmp(const void *s1, const void *s2, size_t n);//对从两个内存地址开始的n个字符进行比较

void *memset(void *, int, size_t);//用某种字节内容覆写一段内存空间

char *strcat(char *dest, const char *src);//在字符串dest之后连接上src

char *strncat(char *dest, const char *src, size_t n);//从src截取n个字符连接在字符串dest之后,返回dest字符串

char *strchr(const char* str, int ch);//从字符串str头开始查找字符ch首次出现的位置

char *strrchr(const char* str,int ch);//从字符串str尾开始查找字符ch首次出现的位置

int strcmp(const char *, const char *);//基于字典顺序比较两个字符串

int strncmp(const char *, const char *, size_t);//基于字典顺序比较两个字符串,最多比较n个字节

int strcoll(const char *, const char *);//基于当前区域设置的字符顺序比较两个字符串

char *strcpy(char* str1, const char* str2);//将str2拷贝给str1

char *strncpy(char* str1, const char* str2, size_t n);//截取str2的n个字符拷贝给str1

char *strerror(int);//返回错误码对应的解释字符串,参见errno.h(非线程安全函数)

size_t strlen(const char *);//返回一个字符串的长度

size_t strspn(const char *s, const char *strCharSet);//从字符串s的起始处开始,寻找第一个不出现在strCharSet中的字符,返回其位置索引值。换句话说,返回从字符串s的起始位置的完全由strCharSet中的字符构成的子串的最大长度。strspn为string span的缩写。不支持多字节字符集。

size_t strcspn(const char *s, const char *strCharSet);//从字符串s的起始处开始,寻找第一个出现在strCharSet中的字符,返回其位置索引值。换句话说,返回从字符串s的起始位置的完全由不属于strCharSet中的字符构成的子串的最大长度。strcspn为string complement span的缩写。不支持多字节字符集。

char *strpbrk(const char *s, const char *strCharSet);//在字符串s中查找strCharSet中任意字符第一次出现的位置的指针值。strpbrk为string pointer break缩写。不支持多字节字符集。

char *strstr(const char *haystack, const char *needle);//在字符串haystack中查找字符串needle第一次出现的位置,heystack的长度必须长于needle

char *strtok(char *strToken, const char *strDelimit );//将一个字符串strToken依据分界符(delimiter)分隔成一系列字符串。此函数非线程安全,且不可重入;但MSVC实现时使用了thread-local static variable因而是线程安全的单仍然是不可重入,即在单线程中不能对两个源字符串交替调用该函数来分析token,应当对一个字符串分析完成后再处理别的字符串。

size_t strxfrm(char *dest, const char *src, size_t n);//根据当前locale转换一个字符串为strcmp使用的内部格式


分享标题:数据结构c语言的串函数 C语言数据结构串
网页网址:http://ybzwz.com/article/hjegjj.html