精华内容
下载资源
问答
  • 最近在写代码的时候,因为工作需要从一个较长的字符串中...首先我们需要自己写两个函数,一个提取指定字符串函数,一个替换字符串函数,下面代码中substr是替换函数,strrep是提取函数。 下面直接给大家上代码 #includ

    最近在写代码的时候,因为工作需要从一个较长的字符串中提取出一小段字符串,然后将新字符串填到提取出来字符串的位置,就像这样子,将str1中的yyyyy提取出来然后将str2填到str1中变成str3。
    str1 = “xxxxyyyyyzzzzzdddd”;
    str2 = “bbbb”;
    str3 = “xxxxbbbbzzzzzdddd”;

    首先我们需要自己写两个函数,一个提取指定字符串函数,一个替换字符串函数,下面代码中substr是替换函数,strrep是提取函数。
    下面直接给大家上代码

    #include <stdio.h>
    #include <string.h>
    int substr(char dst[], char src[],int start, int len)
    {
        int i;
        for(i=0;i<len;i++)
        {
            dst[i]=src[start+i]; 
        }
            dst[i]='\0';
            return i;
    }
    
    static char *strrep(char *str, char *src, char *dest)
    {
        char bstr[strlen(str)];
        memset(bstr, 0, sizeof(bstr));
     
    	for(int i = 0; i < strlen(str); i++){
        if(!strncmp(str+i, src, strlen(src))){
            strcat(bstr, dest);
            i += strlen(src) - 1;
        }else{
         strncat(bstr, str + i, 1);
     }
    }
    
    strcpy(str, bstr);
    return str;
    }
    
    int main()
    {
        char dst[50];              
        char src[]="ws://173.36.158.27:8090/haha/ws/xixi";
        char str[]="//188.16.3.1";
    	char *p,*q;
    	int len1,len2,len;
    	len = strlen(src);
    	printf("%d\n",len);
    	
    	p = strchr(src, ':');
    	len1 = strlen(p);
    	printf("%d\n",len1);
    	
    	q = strrchr(src,':');
    	len2 = strlen(q);
    	printf("%d\n",len2);
        int m;
        m=substr(dst,src,len - len1,len1-len2);  
        printf("%s\n",dst);
        printf("%d\n",m);
        strrep(src, dst, str);
        printf("%s\n",src);
    	
        return 0;
    }
    
    展开全文
  • 字符串操作之删除指定字符

    千次阅读 2014-02-12 16:08:26
    对于字符串,通常还有一个操作就是删除指定字符。在一些面向对象的语言如C++, JAVA中,内部已经实现。自己动手用C语言也尝试实现该操作。 一般思路是,将待删除的字符全部移到串的尾部, 最后从字符串尾部倒数,将...

    对于字符串,通常还有一个操作就是删除指定字符。在一些面向对象的语言如C++, JAVA中,内部已经实现。自己动手用C语言也尝试实现该操作。

    一般思路是,将待删除的字符全部移到串的尾部, 最后从字符串尾部倒数,将最后一个待删除的字符替换为字符串结束标识'\0'。为了保证一次遍历串就完成操作, 我们需要用两个变量来记录当前遍历的位置和已处理串的末尾位置,分别记为p, q.  开始另p = 0, q = -1.    p自增1,扫描位置向前移动, 若p处字符不是待删除的字符, q也开始自增,p,q处的字符交换 ,直到扫描位置为串的末尾。这样,待删除的字符都将末尾。

    该方法的特点是只扫描一次串,但是交换次数较多(可以判断当p, q在相同的位置时, 不交换)。贴上源码

    void strfilter(char* str, char filter)
    {
    	int p = -1, q = 0;
    
    	while(str[q])
    	{
    		if(str[q] != filter)
    		{
    			++p;
    			swap(str+q, str+p);
    		}
    
    		++q;
    	}
    
    	str[p+1] = 0;
    }

    当然实现该功能的方法还有很多,上面提到的算法是最节省内存空间的。还有一个我觉得也可以的方法是扫描整个串,找出所有待删除字符的位置, 根据这些位置信息,一次移动这些串。如果需要动态分配空间来存储位置信息, 则需要扫描串两次。如果串比较长,待删除字符比较多,则效率较低。
    展开全文
  • 批处理中可实现的字符串处理功能有:截取字符串内容、替换字符串特定字段、合并字符串、扩充字符串等功能。下面对这些功能一一进行讲解。 【 1、截取字符串 】 截取字符串可以说是字符串处理功能中最常用的一个子...
      批处理有着具有非常强大的字符串处理能力,其功能绝不低于C语言里面的字符串函数集。批处理中可实现的字符串处理功能有:截取字符串内容、替换字符串特定字段、合并字符串、扩充字符串等功能。下面对这些功能一一进行讲解。
      【 1、截取字符串 】
      截取字符串可以说是字符串处理功能中最常用的一个子功能了,能够实现截取字符串中的特定位置的一个或多个字符。
    说明:从指定变量中截取指定位置的字符串,并返回。注意:这个处理,并不改变原变量的值
    语法格式:%变量名:~数字一,数字二%
    这个字符串截取中,还是有几个规律的:
    1.数字一为正数:表示从开始位置是从0开始向右计算,偏移的字符个数。
    2.数字一为负数:表示从开始位置是从0开始向左计算,偏移的字符个数,即字符串从后往前数。
    3.数字二为正数:表示从偏移位置开始截取的字符串的长度个数。
    4.数字二为负数:表示从偏移位置开始截取的字符串,到字符串从后往前数的字符个数的位置结束

    具体有以下几种截取方式,看实例去理解用法,假设有一个变量【var】,其值为【1234567890】。
    ①正常路线:%var:~5,2% ⇒ 67

    ②无终了:%var:~5% ⇒ 67890

    ③负终了:%var:~5,-2% ⇒ 678

    ④负开始位置:%var:~-6,2% ⇒ 56

    ⑤负开始无终了:%var:~-6% ⇒ 567890

    ⑥负开始负终了:%var:~-6,-2% ⇒ 5678

    ⑦没有开始:%var:~,4% ⇒ 1234

    ⑧无开始负终了:%var:~,-4% ⇒ 123456

    ⑨无开始无终了:%var% ⇒ 1234567890

    正常的情况下,就这几种截取的情况,完全可以根据我们业务的需要,来使用不同的方法来截取字符串。

    但是,这个字符串截取根据不同的情况下是不是有异常发生呢?
    1.当要截取的字符串不为空,并且,要截出的字符串不不能正常截出的时候,返回结果就是空值。
    2.当要截取的字符串本身就是空的时候,取得结果就是【~开始位置,终了位置】,也就是命令的一部分被返回出来。

    再举例说明其基本功能:
      =========================================
      @echo off
      set ifo=abcdefghijklmnopqrstuvwxyz0123456789
      echo 原字符串(第二行为各字符的序号):
      echo %ifo%
      echo 123456789012345678901234567890123456
      echo 截取前5个字符:
      echo %ifo:~0,5%
      echo 截取最后5个字符:
      echo %ifo:~-5%
      echo 截取第一个到倒数第6个字符:
      echo %ifo:~0,-5%
      echo 从第4个字符开始,截取5个字符:
      echo %ifo:~3,5%
      echo 从倒数第14个字符开始,截取5个字符:
      echo %ifo:~-14,5%
      pause
      =========================================
      当然,上面的例子只是将字符串处理的基本功能展示出来了,还看不出字符串处理具体有什么用处。下面这个例子是对时间进行处理。
      =========================================
      @echo off
      echo 当前时间是:%time% 即 %time:~0,2%点%time:~3,2%分%time:~6,2%秒%time:~9,2%厘秒
      pause
      =========================================
      【 2、替换字符串 】
      替换字符串,即将某一字符串中的特定字符或字符串替换为给定的字符串。举例说明其功能:
      =========================================
      @echo off
      set aa=伟大的中国!我为你自豪!
      echo 替换前:%aa%
      echo 替换后:%aa:中国=中华人民共和国%
      echo aa = %aa%
      set "aa=%aa:中国=中华人民共和国%"
      echo aa = %aa%
      pause
      =========================================
      对于上面的例子有一点说明,对比两个echo aa = %aa%可以发现,如果要修改变量aa的内容的话,就需要将修改结果“%aa:中国=中华人民共和国%”赋值给变量aa。上面的字符串截取也有着同样的特点。
      【 3、字符串合并 】
      其实,合并字符串就是将两个字符串放在一起就可以了。举例说明:
      =========================================
      @echo off
      set aa=伟大的中国!
      set bb=我为你自豪!
      echo %aa%%bb%
      echo aa=%aa%
      echo bb=%bb%
      set "aa=%aa%%bb%"
      echo aa=%aa%
      pause
      =========================================
      同样,如果要改变变量aa的内容的话,就需要将合并结果“%aa%%bb%”赋值给变量aa。
      【 4、扩充字符串 】
      “扩充”这个词汇来自于微软自己的翻译,意思就是对表示文件路径的字符串进行特殊的处理,具体功能罗列如下:
      =========================================
      ~I - 删除任何引号("),扩充 %I
      %~fI - 将 %I 扩充到一个完全合格的路径名
      %~dI - 仅将 %I 扩充到一个驱动器号
      %~pI - 仅将 %I 扩充到一个路径
      %~nI - 仅将 %I 扩充到一个文件名
      %~xI - 仅将 %I 扩充到一个文件扩展名
      %~sI - 扩充的路径只含有短名
      %~aI - 将 %I 扩充到文件的文件属性
      %~tI - 将 %I 扩充到文件的日期/时间
      %~zI - 将 %I 扩充到文件的大小
      %~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充
      到找到的第一个完全合格的名称。如果环境变量名
      未被定义,或者没有找到文件,此组合键会扩充到
      空字符串
      可以组合修饰符来得到多重结果:
      %~dpI - 仅将 %I 扩充到一个驱动器号和路径
      %~nxI - 仅将 %I 扩充到一个文件名和扩展名
      %~fsI - 仅将 %I 扩充到一个带有短名的完整路径名
      %~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充
      到找到的第一个驱动器号和路径。
      %~ftzaI - 将 %I 扩充到类似输出线路的 DIR
      =========================================
      以上内容引用于for /?帮助信息。其中的I代表变量I,不过需要说明的是,不是所有的变量都能够进行扩充的,有两个条件:1、该字符串代表一个文件路径;2、变量要用%x来表示,x可取a-z A-Z 0-9共62个字符中的任意一个。举例说明:
      =========================================
      @echo off
      echo 正在运行的这个批处理:
      echo 完全路径:%0
      echo 去掉引号:%~0
      echo 所在分区:%~d0
      echo 所处路径:%~p0
      echo 文件名:%~n0
      echo 扩展名:%~x0
      echo 文件属性:%~a0
      echo 修改时间:%~t0
      echo 文件大小:%~z0
      pause
      =========================================
      其中的%0是批处理里面的参数,代表当前运行的批处理的完全路径。类似的还有%1-%9,分别代表传递来的第1-9个参数。例子如下:
      ===============================================
      @echo off
      set aa=C:\Windows\PPP\a.btx
      call :deal aaa %aa% "c c" ddd eee
      pause>nul
      exit
      :deal
      echo %%0 = %0
      echo %%1 = %1
      echo %%2 = %2
      echo %%3 = %3
      echo %%4 = %4
      echo %%5 = %5
      ===============================================
      其中,变量aa在之前是不可以扩充的,通过call命令并将aa作为参数传递给子函数:deal,将aa变量转换成了变量%1,即符合%x格式,从而可以进行字符串扩充。
      至于%x中x取a-z A-Z的形式,可以复习一下for语句,for语句里面的变量就是用%x来表示的,因而可以直接进行扩充。

    转载于:https://www.cnblogs.com/mq0036/p/3429821.html

    展开全文
  • 该方法通过字符串中的花括号({})和冒号(:)这两个符号,尝试代替早期类C语言风格的格式化输出界定符号(%),format()方法可接受不限个数的参数,且其显示位置也可以不同于出现的顺序。 该方法内部的参数就是我们要格式...

    Python的字符串格式化有两种方式:百分号%方式和format方式

    百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存。

    format用法

    下面我们简单介绍一下比较常用的format()方法。
    该方法通过字符串中的花括号({})和冒号(:)这两个符号,尝试代替早期类C语言风格的格式化输出界定符号(%),format()方法可接受不限个数的参数,且其显示位置也可以不同于出现的顺序。

    该方法内部的参数就是我们要格式化输出的变量。如果不指定位置,则默认按照顺序依次往{}中“填空”,即format()中的第0个参数,就填在第0个{}之内,format()中第1个参数,就填在第1个{}之内,以此类推。

    >>> "{} {}".format("hello","world")
    'hello world'
    

    此外,我们还可使用花括号和数字n搭配的方式(即{n})在花括号中插入format()方法中第n个参数(n从0计数)。这时,n出现的顺序可“不按常规出牌”,代码如下所示。

    >>> "{1} {0}".format("hello","world")  		# 自定义参数索引顺序
    'world hello'
    >>> "{1} {0} {1}".format("hello","world")	# 自定义参数索引顺序,可以重复使用
    'world hello world'
    

    除此之外,我们还可以在参数索引后面添加冒号(:),在冒号之后添加特定的输出格式。

    >>> "{:.2f}".format(3.1415926)		# 保留两位小数
    '3.14'
    >>> "{:.0f}".format(3.1415926)    	# 只保留整数部分
    '3'
    >>> "{:+.2f}".format(3.1415926)    	# 带符号保留2位小数
    '+3.14'
    >>> "{:+.2f}".format(-3.1415926)	# 带符号保留2位小数
    '-3.14'
    

    更多可以参考字符串格式化处理。
    https://www.runoob.com/python/att-string-format.html

    展开全文
  • C语言练习作业(六)

    2015-12-06 16:26:33
    题目:将字符串b的部分连续字符复制到字符串a的指定位置并覆盖,输出字符串a。参与替换与被替换的起始位置由用户指定,如果输入的位数不对,则提醒用户重新输入。如果参与替换的字符多于被替换的字符,则舍去多余...
  • varchar2 1~4000字节 可变长度字符串,与CHAR类型相比,使用VARCHAR2可以节省磁盘空间,但查询效率没有char类型高 数值类型 Number(m,n) m(1~38) n(-84~127) 可以存储正数、负数、零、定点数和精度为38位的浮点数...
  • c语言经典案例

    2014-10-30 08:06:57
    实例113 字符串替换 148 实例114 回文字符串 150 实例115 字符串加密和解密 151 实例116 对调最大数与最小数位置 153 第10章 函数编程基础 155 实例117 输出两个数中的最大值 156 实例118 判断素数 157 实例119 递归...
  • 10026 指定位置输出字符串 50 10027 藏尾诗 51 10028 改错题error11_2.cpp 52 40065 分解质因数 53 40067 打印图案 54 夏6周 56 30062 输出21世纪所有闰年 56 90001 调试示例error09_1.cpp 56 90002 时间换算 57 ...
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    1.23 能否声明和传入数组大小一致的局部数组,或者由其他参数指定大小的参数数组? 1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 声明问题 1.25 函数只...
  • 6.4.2 使用库函数确定字符串的长度 211 6.4.3 使用库函数连接字符串 212 6.4.4 比较字符串 213 6.4.5 搜索字符串 216 6.5 分析和转换字符串 219 6.5.1 转换字符 222 6.5.2 将字符串转换成数值 225 6.7 使用...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别给出了解答,而且结合代码示例阐明要点。 《你必须知道的495个C语言问题》结构...
  • 1.23 能否声明和传入数组大小一致的局部数组,或者由其他参数指定大小的参数数组? 13 1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 13 声明问题 14 ...
  • C语言通用范例开发金典.part2.rar

    热门讨论 2012-08-31 14:18:18
    范例1-15 字符串替换 31 ∷相关函数:strrep函数 1.1.16 字符串的删除 33 范例1-16 字符串的删除 33 ∷相关函数:strdel函数 1.1.17 字符串的比较 35 范例1-17 字符串的比较 35 ∷相关函数:strcmp函数 ...
  • C语言通用范例开发金典.part1.rar

    热门讨论 2012-08-31 14:09:26
    范例1-15 字符串替换 31 ∷相关函数:strrep函数 1.1.16 字符串的删除 33 范例1-16 字符串的删除 33 ∷相关函数:strdel函数 1.1.17 字符串的比较 35 范例1-17 字符串的比较 35 ∷相关函数:strcmp函数 ...
  • void token(char name[],char list[],char token[],FILE *table) //将两个文件中的字符串分别切割转换为token串 {  FILE *in,*out; char ch,c,buffer[N],*link[M]; int i=0,j=0,k=0,LenLink=0; if((in=...
  • 2.7.4 字符串常量 25 2.7.5 转义字符 27 2.7.6 字符转义码 28 2.7.7 数值转义码 29 2.8 C++兼容性 29 2.8.1 字符集 30 2.8.2 注释 30 2.8.3 操作符 30 2.8.4 标识符和关键字 30 2.8.5 字符常量 30 2.9 ...
  • 实例041 在指定位置后插入字符串 50 1.7 函数 51 实例042 求字符串中字符的个数 51 实例043 递归解决年龄问题 53 实例044 求学生的平均身高 54 实例045 分数计算器程序 55 1.8 趣味计算 57 实例046...
  • 214 使用字符串函数复制指定数目的字符 215 在字符串中查找一个字符 216 在字符串中查找一个子串 217 查找字符串中的标记 218 使用strtokf)解析一个字符串 219 扩展strtok函数以实现对空标记的解析 220 理解不区分大...
  • 214 使用字符串函数复制指定数目的字符 215 在字符串中查找一个字符 216 在字符串中查找一个子串 217 查找字符串中的标记 218 使用strtokf)解析一个字符串 219 扩展strtok函数以实现对空标记的解析 220 理解不区分大...
  • 214 使用字符串函数复制指定数目的字符 215 在字符串中查找一个字符 216 在字符串中查找一个子串 217 查找字符串中的标记 218 使用strtokf)解析一个字符串 219 扩展strtok函数以实现对空标记的解析 220 理解不区分大...
  • 214 使用字符串函数复制指定数目的字符 215 在字符串中查找一个字符 216 在字符串中查找一个子串 217 查找字符串中的标记 218 使用strtokf)解析一个字符串 219 扩展strtok函数以实现对空标记的解析 220 理解不区分大...
  • Dos命令大全

    2013-01-08 15:33:00
    参数如果等于指定字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号) 如if "%1"=="a" format a: if {%1}=={} goto noparms if {%2}=={} goto noparms 2、if exist 文件名 待执行的命令 如果有...
  • 高级Shell脚本编程

    2013-10-28 10:08:19
    9.2. 操作字符串 9.3. 参数替换 9.4. 指定变量的类型: 使用declare或者typeset 9.5. 变量的间接引用 9.6. $RANDOM: 产生随机整数 9.7. 双圆括号结构 10. 循环与分支 10.1. 循环 10.2. 嵌套循环 10.3. 循环...

空空如也

空空如也

1 2 3 4
收藏数 73
精华内容 29
关键字:

c语言替换字符串指定位置

c语言 订阅