精华内容
下载资源
问答
  • C语言基本操作,内涵创建、增删改查、销毁
  • 1.在主s中第i个位置之前插入一个子串t\n\t2.在主s中从第i个位置开始共取m个字符,求子t\n\t3.求子t在主s中的起始位置t\n\t4.退出程序\
  • 数据结构串 堆串基本操作C语言实现

    千次阅读 多人点赞 2019-03-12 19:40:42
    【数据结构】基本操作 以一组地址连续的存储单元存放值字符序列,存储空间在程序执行过程中动态分配得到,操作灵活。 代码: 1.结构体定义 typedef struct { char * ch; //若是非空串,则按长分配存储...

    【数据结构】串 堆串的基本操作

    以一组地址连续的存储单元存放串值字符序列,存储空间在程序执行过程中动态分配得到,操作灵活。

    代码:

    1.结构体定义
    typedef struct {
    	char * ch;	//若是非空串,则按串长分配存储区,否则ch为NULL
    	int length; //串长度
    }HString;
    
    2.基本操作函数声明
    // 基本操作的函数原型说明
    
    //初始化生成一个空串T
    Status StrInit(HString &T);
    
    //生成一个其值等于串常量chars的串T
    Status StrAssigh(HString &T, char * chars);
    
    //返回S的元素个数,称为串的长度
    int StrLength(HString S);
    
    //若S>T,则返回值大于0....
    Status StrCompare(HString S, HString T);
    
    //将S清为空串,并释放S所占空间 
    Status ClearString(HString &S);
    
    //用T返回由S1和S2联接而成的新串
    Status Concat(HString &T, HString S1, HString S2);
    
    //返回串S的第pos个字符起长度为len的子串
    Status SubString(HString &Sub,HString S, int pos, int len);
    
    3.函数定义
    #include "String.h"
    
    Status StrInit(HString & T)
    {
    	T.ch = NULL;
    	T.length = 0;
    	return OK;
    }
    
    Status StrAssigh(HString & T, char * chars)
    {
    	if (T.ch)free(T.ch);		//释放其原有空间
    	char* c = chars; int i = 0;
    	for (i = 0; *c; i++, ++c); //求chars的长度i
    	if (!i) {
    		T.ch = NULL;
    		T.length = 0;
    	}
    	else {
    		if (!(T.ch = (char*)malloc(i * sizeof(char)))) exit(OVERFLOW);
    		for (int  j = 0; j < i; j++)T.ch[j] = chars[j];
    		T.length = i;
    	}
    	return OK;
    }
    
    
    int StrLength(HString S)
    {
    	return S.length;
    }
    
    Status StrCompare(HString S, HString T)
    {
    	for (int i = 0; i < S.length&&i<T.length; i++)
    		if (S.ch[i] != T.ch[i])return S.ch[i] - T.ch[i];
    	return S.length - T.length;
    }
    
    Status ClearString(HString & S)
    {
    	if (S.ch) {
    		free(S.ch); S.ch = NULL;
    	}
    	S.length = 0;
    	return OK;
    }
    
    Status Concat(HString & T, HString S1, HString S2)
    {
    	if (T.ch) free(T.ch);	//释放旧空间
    	if (!(T.ch = (char*)malloc((S1.length + S2.length) * sizeof(char))))
    		exit(OVERFLOW);
    	for (int i = 0; i < S1.length; i++) T.ch[i] = S1.ch[i];
    	T.length = S1.length + S2.length;
    	for (int i = S1.length; i < T.length; i++) T.ch[i] = S2.ch[i-S1.length];
    	return OK;
    }
    
    Status SubString(HString &Sub,HString S, int pos, int len)
    {
    	if (pos<1 || pos>S.length || len<0 || len>S.length - pos + 1)return ERROR;
    	if (Sub.ch) free(Sub.ch);			//释放旧空间
    	if (!len) {
    		Sub.ch = NULL; Sub.length = 0;
    	}
    	else {
    		Sub.ch = (char*)malloc(len * sizeof(char));
    		for (int i = 0; i < len; i++)
    		{
    			Sub.ch[i] = S.ch[pos - 1 + i];
    		}
    		Sub.length = len;
    	}
    	return OK;
    }
    
    
    4.测试
    #include"String.h"
    using namespace std;
    
    void StrDisplay(HString S) {
    	//显示串
    	for (int i = 0; i < S.length; i++)
    	{
    		cout << S.ch[i];
    	}
    }
    int main() {
    	HString A;
    	StrInit(A);
    	HString B;
    	StrInit(B);
    	HString C;
    	StrInit(C);
    	char b[10] = "hello";
    	char c[10] = " world";
    
    	cout << "初始化B,显示B:" << endl;
    	StrAssigh(B, b);
    	StrDisplay(B);
    
    	cout << endl<<"初始化C,显示C:" << endl;
    	StrAssigh(C, c);
    	StrDisplay(C);
    	
    	cout << endl << "比较串B,C,返回一个数值" << endl;
    	cout << StrCompare(A, B);
    	
    	cout << endl<<"将B,C串联接成串A,输出A:" << endl;
    	Concat(A, B,C);
    	StrDisplay(A);
    
    	cout << endl << "输出串A第二个字符起后五个字符" << endl;
    	SubString(B, A, 2, 5);
    	StrDisplay(B);
    	cout << endl << "串长度为";
    	cout << StrLength(B);
    	
    	cout << endl;
    	system("pause");
    
    }
    

    测试结果:
    在这里插入图片描述

    展开全文
  • C语言--字符串基本操作

    千次阅读 2017-08-12 23:00:16
    字符串基本操作 #include &lt;stdio.h&gt; //指针操作 void StatString1(char *pInputString, int *pDigitNum) { *pDigitNum = 0; printf("%s\n",pInputString); while(*pInputString!=...

    字符串基本操作

    #include <stdio.h>
    
    
    
    //指针操作 
    void StatString1(char *pInputString, int *pDigitNum)
    {
        *pDigitNum = 0;
        printf("%s\n",pInputString);
        while(*pInputString!='\0'){ // for(;*pInputString!='\0';pInputString++){...}
            if(*pInputString>='0' && *pInputString<='9'){
                (*pDigitNum)++;
            }
            pInputString++;
        }
    } 
    
    
    //数组下标操作
    void StatString2(char *pInputString, int *pDigitNum)
    {
        *pDigitNum = 0;
        int i = 0;
    
        for(i=0;pInputString[i]!='\0';i++){ 
            if(pInputString[i]>='0' && pInputString[i]<='9'){
                (*pDigitNum)++;
            }
        }
    } 
    
    int main()
    {
        char *pInputString = "asdfg14fdf3f"; 
        int pDigitNum;
    
        StatString1(pInputString,&pDigitNum); // 传入字符串指针,int变量地址 
        printf("%d\n",pDigitNum);   
        return 0;
    }

    memcpy内存拷贝

    #include <stdio.h>
    
    /*
    
    void *memcpy(void*dest, const void *src, size_t n);
    由src为起始地址的连续n个字节数据复制到以dest为起始地址的空间内
    
    */
    
    //字符串拷贝 
    void strcopy(char **target, char *source){
    
        if(source == NULL) return ; // 处理空指针 
    
        unsigned int len = strlen(source);
        *target = (char*)malloc(len+1);
        memcpy(*target,source,len); // 注:传的是指针 
        (*target)[len]='\0';
    } 
    
    // 字符串连接,将字符串source链接到target后面,输出为x 
    void strcombine(char **x, char *target, char *source){
    
        if(source == NULL || target == NULL) return ;  
    
        unsigned int len =strlen(target)+strlen(source);
        *x = (char*)malloc(len+1);
        memcpy(*x,target,strlen(target));
        memcpy(*x+strlen(target),source,strlen(source));
        (*x)[len] = '\0';   
    }
    
    // 字符串截取,截取字符串x从index下标开始长度为length的字符串,保存在t中 
    void strcatch(char **t, char *x, unsigned int index, unsigned int length){
        if(length==0 || x==NULL || strlen(x)<(index+length)) return;
    
        *t = (char*)malloc(length+1);
        memcpy(*t,x+index,length);
        (*t)[length] = '\0';
    }
    
    int main(){
        char* target = "efsj";
        char* source = "abcd"; 
        char* x="12";
        char* t;    
        int index = 2;
        int length = 3;
    
        strcopy(&target,source);    
        printf("%s\n",target);  
    
        strcombine(&x,target,source);
        printf("%s\n",x);
    
        strcatch(&t,x,index,length);
        printf("%s\n",t);
    
        return 0;
    }
    
    展开全文
  • 1、实现赋值、比较、求长、串联接以及求子这5种基本操作。 2、能利用上述实现的基本操作完成置换Replace (&S, T, V)以及从中删除一段子StrDelete(&S,pos,len)的操作。 3、以上要求实现的操作不能直接...
  • C语言-字符串操作

    2018-01-18 10:16:28
    C语言中字符串基本操作,主要有增加删除查找修改等常用操作
  • C语言中字符基本操作

    千次阅读 2019-06-01 15:46:49
    C语言中字符基本操作 用惯了c#和JavaScript,反过头来再学习c语言的字符操作,真是操碎了心。 这大概是高级语言和低级语言的区别吧。 复制字符 截取字符 查找字符 字符长度 字符中大小写...

    C语言中字符串的基本操作

    用惯了c#和JavaScript,反过头来再学习c语言的字符串操作,真是操碎了心。
    这大概是高级语言和低级语言的区别吧。

    • 连接字符串
    • 复制字符串
    • 截取字符串
    • 查找字符串
    • 字符串长度
    • 字符串中大小写转换
    • 字符串是否相等

    连接字符串
    strcat(s1, s2);

    复制字符串

    #include <stdio.h>
    #include <string.h>
    int main()
    {
        char stra[] = "abcd";
        char strb[] = "hjklmpei";
        printf("stra: %s\t&stra:%d \n", stra, &stra);
        printf("strb: %s\t &strb:%d \n", strb, &strb);
        printf("-------\n");
        strcpy(stra, strb);
        printf("stra: %s\t&stra:%d \n", stra, &stra);
        printf("strb: %s\t &strb:%d \n", strb, &strb);
    }
    运行结果:
    stra: abcd      &stra:6422315
    strb: hjklmpei   &strb:6422306
    -------
    stra: hjklmpei  &stra:6422315
    strb: hjklmpei   &strb:6422306
    

    strcpy(p, p1) 复制字符串
    strncpy(p, p1, n) 复制指定长度字符串 复制字符串的变种,从

    截取字符串
    截取字符串可以看作是复制字符串的变种,指定了起始位置m和截取长度n

     strncpy(stra, strb+m ,n);//起始位置m和截取长度n,还要判断m、n是否越界
     stra[n]=0;//给数组结尾加个NULL,否则数组可能没有结束标记
    

    查找字符串

    	char strb[] = "hjklmpei";
        printf("strb: %s\t &strb:%#X \n", strb, &strb);
        printf("-------\n");
        char *p=strstr(strb,"jk");
        printf("p: %#p",p);
        //运行结果
    strb: hjklmpei   &strb:0X61FF21
    -------
    p: 0X0061FF22
    

    strstr()是查找字符串的位置,strchr()是查找字符的位置,函数名比较相近。

    字符串长度
    strlen()

    字符串中大小写转换

    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    int main()
    {
        char stra[] = "a";
        char strb[] = "hjklmpei";
        printf("stra: %s\t&stra:%#X \n", stra, &stra);
        printf("strb: %s\t &strb:%#X \n", strb, &strb);
        printf("-------\n");
        for(int i=0;i<strlen(strb);i++){
            strb[i]=toupper(strb[i]);//利用c封装的字符大小写转换函数toupper/tolower
        }
        //printf("stra: %s\t &stra:%d \n", stra, &stra);
        printf("strb: %s\t &strb:%#X \n", strb, &strb);
    }
    

    字符串是否相等
    strcmp(s1, s2);

    展开全文
  • C语言 文件基本读写操作

    千次阅读 2020-04-16 00:51:17
    这里写目录标题C语言 文件读写操作文件打开模式文件操作函数fopen()——打开文件fclose()——关闭文件流fputs()——写入文件内容fgets()——获取文件内容打开文件实例读写文件实例 C语言 文件读写操作 最近在写c语言...

    C语言 文件读写操作

    最近在写c语言课设,接触到很多新知识,所有在此记录自己的所得。
    就不扯那么多底层的东西了,直接上相关知识

    文件打开模式

    打开模式 说明(只读=就是只能读取,只写=就是只能写入)
    w 只写 的方式打开,并清空文件数据,若文件不存在则 新建文件
    r 只读 的方式打开,若文件不存在,则文件打开失败
    a 只写/追加 的方式打开,若文件不存在,则文件打开失败
    w+ 读写 的方式打开,并清空文件数据,若文件不存在则新建文件
    r+ 读写 的方式打开,若文件不存在,则文件打开失败
    a+ 读写/追加 的方式打开,若文件不存在,则文件打开失败

    打开二进制的,打开模式,同上,后面加个b:wb, rb , ab , wb + 。。。

    文件操作函数

    fopen()——打开文件

    原型:FILE* fopen(char const* _FileName , char const* _Mode );

    1. fopen打开失败的原因:1,路径错误 。 2,文件不存在 。
    形参 说明
    char const* _FileName 文件的路径
    char const* _Mode 文件打开模式
    返回值 说明
    FILE* 文件指针
    NULL 文件打开失败

    fclose()——关闭文件流

    原型:int fclose( FILE* _Stream );

    1. 通常在文件操作完成后,使用fclose()来关闭文件流
    2. 文件光标指针返回第一行。
    形参 说明
    FILE* _Stream 已经打开的文件指针

    fputs()——写入字符串

    原型:int fputs( char const* _Buffer, FILE* _Stream );

    1. 如果你之前fopen打开的文件模式,不是只写,或者读写,编译器会报错
    2. 写入成功返回0 ,失败返回非零的值。
    形参 说明
    char const* _Buffer 传入一个自定义的字符数组,或指针
    FILE* _Stream 已经打开的文件指针

    fgets()——获取文件内容

    原型:char* fgets( char* _Buffer, int _MaxCount, FILE* _Stream);

    1. 要确保buffer数组的长度为1024,MaxCount也为1024.
    2. 函数第n次运行后,文件光标指针自动移到n+1行,下一次使用fgets,将在第n+1行读取数据

    例如:没有使用fgets前,光标指针位置
    在这里插入图片描述
    使用fgets后,光标指针位置
    在这里插入图片描述

    形参 说明
    char* _Buffer 传入一个自定义的字符数组,或指针
    int _MaxCount 最大字符数(1024)
    FILE* _Streamt 已经打开的文件指针

    fscanf ()——格式化获取文件内容

    原型:int fscanf ( FILE *fp, char * format, … );

    1. 跟 scanf 读取格式化的操作基本一样。
    2. 读取文件成功:返回参数列表中被成功赋值的参数个数。
    形参 说明
    char * format 传入格式化操作符:%d,%s,%f 之类的
    FILE* _Streamt 已经打开的文件指针

    fprintf ()——格式化写入字符串

    原型:int fprintf ( FILE *fp, char * format, … );

    1. 跟 printf 输出格式化的操作基本一样。
    2. 写入成功:返回成功写入的字符的个数,失败则返回负数。
    形参 说明
    char * format 传入格式化操作符:%d,%s,%f 之类的
    FILE* _Streamt 已经打开的文件指针

    打开文件实例

    我们用vs2017打开新建一个文件

    //输入以下代码
    #include <stdio.h>
    
    int main() {
    	//1.创建文件结构指针
    	//2.传入test.txt这个相对路径下的文件
    	//3.使用w操作符新建文件
    	FILE *filepointer = fopen("test.txt","w");
    	if (filepointer==NULL) {
    		printf("文件打开失败");
    	}
    	else {
    		printf("文件打开成功");
    	}
    	return 0;
    }
    

    然后点击运行工具栏的本地windows调速器运行代码,
    会出现下图:
    函数已经被废弃
    这里我们要注意了,vs2017对一些函数进行了修改,像fopen,printf,scanf函数都被弃用。
    解决方法——点击链接:https://blog.csdn.net/qq_31254489/article/details/105548474

    解决函数不安全的问题后,得到结果:

    在这里插入图片描述


    读写文件实例

    #include <stdio.h>
    
    int main() {
    
    	FILE *filepointer = fopen("test.txt","w+");
    	if (filepointer==NULL) {
    		printf("文件打开失败");
    	}
    	else {
    		printf("文件打开成功\n");
    		//fputs向文件写入字符串
    		fputs("fputs测试\n",filepointer);
    		//fprintf向文件写入字符串
    		fprintf(filepointer, "fprintf测试(无参数)\n");
    		fprintf(filepointer, "fprintf测试(有参数):%d,%s \n",1,"参数2");
    		
    	}
    	//关闭文件
    	fclose(filepointer);
    	//以读写的方式打开文件
    	filepointer = fopen("test.txt","r+");
    	//创建缓冲区
    	char buf[1024];
    	//fget读取文件字符串,并将光标移到下一行
    	fgets(buf, 1024, filepointer);
    	printf("fputs输出:%s", buf);
    
    	//fscanf读取文件字符串,并将光标移到下一行
    	fscanf(filepointer,"%s", buf);
    	printf("fscanf输出:%s\n", buf);
    
    	fscanf(filepointer, "%s", buf);
    	printf("fscanf输出:%s", buf);
    
    	return 0;
    
    }
    

    运行得到结果:

    在这里插入图片描述
    使用fsancf要注意回车符"\n"的处理。

    展开全文
  • 1、C语言的字符都是已零结尾的字符 2、在C语言中没有字符类型,都是通过字符数组来模拟字符
  • 数据结构实验三_串基本操作的编程实现(C语言

    千次阅读 多人点赞 2019-04-24 00:05:19
    串基本操作的编程实现 二、题目要求 串基本操作的编程实现,掌握串的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、合并、剪裁等操作,存储结构可以在顺序结构或链接结构、索引结构中任选...
  • //字符概念! /* ================================================================== 题目:练习字符的 1、输入输出 gets(str) puts(str) 2、长度统计 strlen(str) 3、大小写转换 strupr(str) strlwr(str)
  • C语言基本文件操作

    千次阅读 2017-01-02 18:56:15
    C语言基本文件操作序列1:基本的txt文件读入读出先来段代码看看#include int main() { char a[] = "hellow\n"; char buf[6]; FILE *fp = NULL; fp = fopen("C:\\123.txt","w+");//让fp指向G盘下的123.txt,w...
  • C语言中以’\0’表示的终结,此时长为隐藏值,不方便进行某些串操作。所以,这里我们用第一个数组来存储长度。 StrAssign(*T,chars) 初始条件:char是字符常量 操作结构:生成一个值为chars的T 代码: #...
  • 数据结构之基本操作,使用C语言,完整代码,可以使用
  • 类型的定义 typedef struct {    //定义  char *ch;  int length;     //长度 }HString; 的初始化 int StrAssign(HString &T,char *chars) { printf(...
  • 基本操作(c语言)

    千次阅读 多人点赞 2018-12-20 09:43:07
    #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #define MAX_NUM 100 typedef struct str{ char ch[MAX_NUM+1];...//字符初始化 SString initSString() { SString str=(SStr...
  • 这是一个对支持进行插入,复制,搜索等基本操作C语言程序!
  • #include <stdio.h> #include <stdlib.h> #include<string.h> #define TRUE 1 #define FALSE 0 #define OVERFLOW 1 #define MAX_SIZE 1024 ...*的顺序结构实现 typedef str...
  • C语言实现基本模式匹配

    千次阅读 多人点赞 2017-05-24 14:45:51
    前言本程序是数据结构上机实验内容,参考《数据结构(C语言版)》(清华大学出版社)中串操作部分的伪代码实现。题目要求设计一个程序实现基本模式匹配。所谓模式匹配,就是判断某个是否是另一个已知的子串...
  • 字符基本操作,c语言实现

    千次阅读 2016-01-09 10:49:48
    //计算的长度: int getLength(char *str) {  int len=0;  if(NULL == str)  return len;  while(str[len++]!='\0');  return --len; } ///2.的比较 int strCompare(char *str1,char *str2) {  if(NULL ...
  • 数据结构之基本操作的实现(c语言

    万次阅读 多人点赞 2018-01-21 17:01:26
    我们先一起来看的一些概念… 字符(简称),可以将其看作是种特殊的线性表,其特殊性在于线性表的数据元素的类型总是字符性,字符的数据对象约束为字符集。 是由0个或多个字符组成的有限序列。一般记作...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 128,318
精华内容 51,327
关键字:

c语言串的基本操作

c语言 订阅