精华内容
下载资源
问答
  • 最近在写代码的时候,因为工作需要从一个较长的字符串中...首先我们需要自己写两个函数,一个提取指定字符串函数,一个替换字符串函数,下面代码中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;
    }

    当然实现该功能的方法还有很多,上面提到的算法是最节省内存空间的。还有一个我觉得也可以的方法是扫描整个串,找出所有待删除字符的位置, 根据这些位置信息,一次移动这些串。如果需要动态分配空间来存储位置信息, 则需要扫描串两次。如果串比较长,待删除字符比较多,则效率较低。
    展开全文
  • C语言练习作业(六)

    2015-12-06 16:26:33
    题目:将字符串b的部分连续字符复制到字符串a的指定位置并覆盖,输出字符串a。参与替换与被替换的起始位置由用户指定,如果输入的位数不对,则提醒用户重新输入。如果参与替换字符多于被替换字符,则舍去多余...

    慢慢地,对指针的理解也深入了一些,这次的作业没事先参考答案,感觉很有成就感。


    原题目是C语言程序设计书上第8.7练习题,我稍微改了一些,让这个程序更加通用。


    题目:将字符串b的部分连续字符复制到字符串a的指定位置并覆盖,输出字符串a。参与替换与被替换的起始位置由用户指定,如果输入的位数不对,则提醒用户重新输入。如果参与替换的字符多于被替换的字符,则舍去多余部分(不舍掉的功能现在懒得做);如果参与替换的字符少于被替换的字符,则将字符串a多出来的字符删掉,后面的字符前移。


    其中判断输入起始位置是否正确并让用户重新输入的功能,因为没想起来更好而且简单的方法,就直接用了goto语句,我知道这样不好,不过在这里用一下应该没什么事吧。


    #include<stdio.h>
    #include<string.h>
    
    void myStrCpy(char *myStringA, char *myStringB, int mA, int mB, int nA, int nB);
    
    int main()
    {
    	int mA = 0, mB = 0, nA = 0, nB = 0;
    	char myStringA[100];
    	char myStringB[100];
    	printf_s("请输入字符串a:\n");
    	//scanf_s("%s", myStringA,99);
    	gets_s(myStringA, 99);
    	printf_s("请输入字符串b:\n");
    	gets_s(myStringB, 99);
    	//scanf_s("%s", myStringB,99);
    	A: printf_s("字符串a的第几位到第几位将被替换?\n");
    	scanf_s("%d,%d", &mA, &nA);
    	if (mA >= nA)
    	{
    		printf_s("错误的位数。\n");
    		goto A;
    	}
    	B: printf_s("字符串b的第几位到第几位将参与替换?\n");
    	scanf_s("%d,%d", &mB, &nB);
    	if (mB >= nB)
    	{
    		printf_s("错误的位数。\n");
    		goto B;
    	}
    	myStrCpy(myStringA, myStringB, mA, mB, nA, nB);
    	printf_s("%s", myStringA);
    
    	return 0;
    }
    
    void myStrCpy(char *myStringA, char *myStringB, int mA, int mB, int nA, int nB)
    {
    	char *pA, *pB, *pX;
    	int t = 0;
    	int lengthA = 0;
    	lengthA = strlen(myStringA);
    	pA = myStringA + mA - 1;
    	pB = myStringB + mB - 1;
    	pX = myStringA + nA;
    	char myStringC[100];
    	for (int i = 0;pB < myStringB + nB + 1;pB++, i++)
    	{
    		myStringC[i] = *pB;
    		t = i;
    	}
    	for (int i = 0;i <= (nA - mA);pA++)
    	{
    		*pA = myStringC[i];
    		i++;
    		if (i >= (t + 1) && (nA - mA)>(nB - mB))         //如果字符串全部复制完成,而字符串a仍有需要替换却没被覆盖掉的字符,则把这些字符删掉
    		{
    			for (int j = 0;j < lengthA - nA + 1;j++)
    			{
    				*(pX - ((nA - mA) - (nB - mB))) = *pX;
    				pX++;
    			}
    			break;
    		}
    	}
    }


    展开全文
  • c语言经典案例

    2014-10-30 08:06:57
    实例110 在指定位置插入字符 144 实例111 删除字符串中的连续字符 146 实例112 统计各种字符个数 147 实例113 字符替换 148 实例114 回文字符串 150 实例115 字符串加密和解密 151 实例116 对调最大数与最小数位置...
  • 关于C语言中memset函数使用(适合小白看)

    千次阅读 多人点赞 2019-02-06 22:05:20
    //memset函数的作用就是在替换指定位置的值 //memset()函数有三个参数 //第一个参数为数组或者字符数组的名称(其实就是首地址) //第二个参数为0或者-1或者单个字符(注意用单引号) //具体使用看样例 //第三个...

    只是浅显的理解memset函数的使用

    //memset函数的作用就是在替换指定位置的值
    //memset()函数有三个参数
    //第一个参数为数组或者字符数组的名称(其实就是首地址)
    //第二个参数为0或者-1或者单个字符(注意用单引号)
    //具体使用看样例 
    //第三个参数为改变的数组大小(或者称为长度) 
    #include<stdio.h>
    #include<string.h>
    
    void Demo_1()//样例一 
    {
    	int a[10];//声明的是int数组(注意 ) 
    	memset(a,-1,sizeof(int )*10);//第二个参数可以变为0
     	//此时的第二个参数不能为单个字符 (具体原因我不是很清楚)
     	//建议百度百科,似乎与字节有关 
     	//如果写成单个字符输出的结果为乱码 
     	//有兴趣可以试试 
    	for(int i = 0; i<10 ; i++)
    	{
    		printf("%d ",a[i]);
    	}
     } 
     void Demo_2()//样例二 
    {
    	char a[10];
    	memset(a,'a',sizeof(char)*10);//第二个参数为单个字符 
    	//此时的第二个参数不能为0或者-1 (具体原因我不是很清楚)
    	//如果写成int值的话会变成空、
    	//有兴趣可以试试 
    	for(int i = 0; i<10 ; i++)
    	{
    		printf("%c ",a[i]);
    	}
     }
     void Demo_3()//样例三 
    {
    	char a[] = "sdadasdaaqweqwsdas";//声明并赋值 
    	memset(a,'a',sizeof(char)*5);//指定前5个元素 
    	 
    	for(int i = 0; i<10 ; i++)
    	{
    		printf("%c ",a[i]);
    	}
     }
    int main()
    {
    	printf("-------样例一---------\n");
    	Demo_1(); 
    	printf("\n-----样例二-----------\n");
    	Demo_2();
    	printf("\n-----样例三-----------\n");
    	Demo_3();
     
    }
    

    在这里插入图片描述

    展开全文
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    1.23 能否声明和传入数组大小一致的局部数组,或者由其他参数指定大小的参数数组? 1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 声明问题 1.25 函数只...
  • 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 ...
  • 2.5.3 指定整数常量 37 2.6 浮点数 38 2.7 浮点数变量 38 2.8 使用浮点数完成除法运算 39 2.8.1 控制小数位数 40 2.8.2 控制输出的字段宽度 41 2.9 较复杂的表达式 41 2.10 定义常量 44 2.10.1 极限值 46 ...
  • 批处理有着具有非常强大的字符串处理能力,其功能绝不低于C语言里面的字符串函数集。批处理中可实现的字符串处理功能有:截取字符串内容、替换字符串特定字段...说明:从指定变量中截取指定位置字符串,并返回。注...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    1.23 能否声明和传入数组大小一致的局部数组,或者由其他参数指定大小的参数数组? 13 1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 13 声明问题 14 ...
  • 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函数 ...
  • // 计算显示窗口大小和位置 rc.Left = (bInfo.dwSize.X - chNum)/2 - 2; rc.Top = 8; // 原代码段中此处为bInfo.dwSize.Y/2 - 2,但是如果您的DOS屏幕有垂直滚动条的话,还需要把滚动条下拉才能看到,为了方便...
  • 这是一本C语言的权威参考手册,对C语言的基本概念和运行函数库提供了完整的描述,并强调了以正确性、可移性和可维护性为基本出发点的良好编程风格。本书是C语言的详尽参考手册,分为两部分:第一部分讨论了C语言的...
  • Python的字符串格式化有两种方式:百分号%方式和format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存。...如果不指定位置,则默认按照顺序依次
  • 字符类型 char 1~2000字节 固定长度字符串,长度不够的用空格补充 varchar2 1~4000字节 可变长度字符串,与CHAR类型相比,使用VARCHAR2可以节省磁盘空间,但查询效率没有char类型高 数值类型 Number(m,n) m(1~38) ...
  • Dos命令大全

    2013-01-08 15:33:00
    指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。 7.start 命令 调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。 入侵常用参数: MIN 开始时窗口最小化 ...
  • 2.1.5 Unicode的解救方案 2.2 宽字符c语言 2.2.1 char数据类型 2.2.2 更宽的字符 2.2.3 宽字符库函数 2.2.4 维护一个源代码文件 2.3 宽字符和Windows 2.3.1 Windows头文件的类型 2.3.2 Windows函数调用 2.3.3 ...
  • 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 理解不区分大...
  • 实例041 在指定位置后插入字符串 50 1.7 函数 51 实例042 求字符串中字符的个数 51 实例043 递归解决年龄问题 53 实例044 求学生的平均身高 54 实例045 分数计算器程序 55 1.8 趣味计算 57 实例046...

空空如也

空空如也

1 2 3 4
收藏数 75
精华内容 30
关键字:

c语言替换指定位置字符

c语言 订阅