精华内容
下载资源
问答
  • c语言实现字符串替换

    2021-05-18 13:53:34
    网上搜了一把,发现搜到的字符串替换方法都是把字符串的长度写死的,这样的话对长字符串替换就存在问题。所以今天就搞一个没有长度限制的字符串替换方法。c语言小白,总结过程中遇到的问题,以点带面,大神请见谅。...

    网上搜了一把,发现搜到的字符串替换方法都是把字符串的长度写死的,这样的话对长字符串替换就存在问题。所以今天就搞一个没有长度限制的字符串替换方法。

    c语言小白,总结过程中遇到的问题,以点带面,大神请见谅。

    首先总结一下问题点和知识点

    1.字符串和字符数组的区别

    2.malloc分配内存会不会修改内存中的内容

    3.函数内部对形参的修改是否会影响函数外部的内容

    接下来贴代码:

    void replaceString(char *src, char *findchar , char *repchar)

    {

    printf("::%s\n", src);

    printf("find char is::%s\n", findchar);

    printf("repchar is::%s\n", repchar);

    char *findlen;

    char *dest;

    while ((findlen = strstr(src, findchar)))    //查找src中第一个出现findchar

    {

    char *tmp = (char *)malloc(strlen(src) + (strlen(repchar) - strlen(findchar)) + 1);//申请一个新的内存可以放下替换后的字符串

    //memcpy(tmp, "\0", strlen(tmp));

    strncpy(tmp, src, findlen - src);//把替换字符前面的拷贝

    tmp[findlen - src] = '\0';//赋值一个结尾符,下面会说原因

    strcat(tmp, repchar);//追加替换的内容

    strcat(tmp, findlen + strlen(findchar));//追加之后要替换内容之后的字符串

    src = strdup(tmp);//临时地址拷贝给src

    free(tmp);//释放临时变量

    }

    printf("::%s\n", src);

    //return null;

    }

    思考

    这种方式每查找到一次替换都要执行两次的申请内存操作,是否影响性能,有没有好的方法?各位有好的方法欢迎指教。

    1.字符串和字符数组的区别

    字符串和字符数组是不同的两个概念。char *str = "abc"和char str[] = {'a','b','c'}是完全不同的。

    (1)字符串是以第一个'\0'结尾的一串字符。

    (2)字符数组是一个固定长度的数组,数组里面存放的是字符。

    直观举个例子,“abc\0db”这个是可以存放到字符数组里面的。并且取出来也一样。但是如果放到字符串中的话,取出来就是“adc”了。因为字符串检测到'\0'就认为字符串结束了。

    【注】

    char *str = "abc" 中变量str存放在栈中,而变量str指向的内容存放在数据段中,因为"abc"是数据段中的字符串常量,是只读的不可以修改,所以执行str[0]='b'会报错。str实际长度是4,在abc后面还有一个'\0'。sizeof(str)是4,strlen(str)是3。

    char str[]={"abc"}。虽然是字符数组但是他的长度(sizeof)实际是4,因为“abc”是一个字符串,字符串后面是有'\0'的。但是strlen(str)得到的结果还是3的。

    参考:http://c.biancheng.net/view/337.html

    有两个知识点。一个是字符串和字符数组的(上面知识点),另一个是内存划分的。

    可执行程序在内存运行时由栈、堆、数据段、代码段组成。

    栈:由编译器自动生成和释放,存放的是函数的参数值,局部变量等

    堆:有代码生成和释放,一定要释放,否则内存泄漏。通过malloc等方式生成内存

    数据段:分为只读的,已初始化读写的。未初始化读写的。只读的是一些常量,const修饰的。已初始化读写的是初始化的全局变量或者静态变量。未初始化读写的是未初始化的全局变量或静态变量。

    代码段:是二进制代码的存储区。

    参考:https://blog.csdn.net/weixin_39964178/article/details/82875304

    https://blog.csdn.net/Filter_CPH/article/details/48524249

    2.malloc分配内存会不会修改内存中的内容

    malloc分配内存会不会修改内存中的内容,calloc分配内存会设置内存中的内容为0,realloc重新调整内存会大小。

    引出这个问题的原因是把被替换字符前面通过strncpy复制给tmp之后,通过strcat追加替换字符串会出现追加的点不正确的问题,原因是没有把字符串结尾符'\0'拷贝到字符串结尾。因为malloc的内存不会修改内存中的内容,恰巧内存里面没有'\0'则会造成中间多出来一些无用字符的问题。此问题是在strncpy之后在给字符串加上一个结尾符来解决的,也可以通过calloc或者memcpy申请的内存全部都是'\0'来解决

    3.函数内部对形参的修改是否会影响函数外部的内容

    形参变量和实参变量是由编译系统分配的两 个不同的内存单元。在函数调用时发生的值传送是把实参变量的值赋予形参变量。

    注意上面这句话,如果是普通变量传的直接就是值,如果是指针变量传的是地址。普通变量的话就没什么好说的了,函数内外部没有关联。如果传的是地址的话,内部对地址的修改会反应到外部。但是如果内部对传入地址变量重新附地址后,则对新地址的修改不会影响到外面。

    展开全文
  • C语言实现字符串替换

    2021-05-19 06:02:48
    /*2011年7月21日19:58:20语法:replace(char ...*/#include #include /*** 参数:* originalString[] :原始字符串* key[] : 待替换字符串* swap[] : 新字符串*/void replace(char originalString[], char key[]...

    /*

    2011年7月21日19:58:20

    语法:replace(char str[], char key[] char swap[]);

    */

    #include

    #include

    /**

    * 参数:

    * originalString[] :原始字符串

    * key[] : 待替换的字符串

    * swap[] : 新字符串

    */

    void replace(char originalString[], char key[], char swap[]){

    int lengthOfOriginalString, lengthOfKey, lengthOfSwap, i, j , flag;

    char tmp[1000];

    //获取各个字符串的长度

    lengthOfOriginalString = strlen(originalString);

    lengthOfKey = strlen(key);

    lengthOfSwap = strlen(swap);

    for( i = 0; i <= lengthOfOriginalString - lengthOfKey; i++){

    flag = 1;

    //搜索key

    for(j = 0; j < lengthOfKey; j ++){

    if(originalString[i + j] != key[j]){

    flag = 0;

    break;

    }

    }

    //如果搜索成功,则进行替换

    if(flag){

    strcpy(tmp, originalString);

    strcpy(&tmp[i], swap);

    strcpy(&tmp[i + lengthOfSwap], &originalString[i + lengthOfKey]);

    strcpy(originalString, tmp);

    i += lengthOfSwap - 1;

    lengthOfOriginalString = strlen(originalString);

    }

    }

    }

    /**

    * main function

    */

    int main(){

    char originalString[1000] = {"abcfffffabcfffffabcfffff"};

    char key[] = {"abc"};

    char swap[] = {"aabbcc"};

    replace(originalString, key, swap);

    printf("%s\n", originalString);

    return 0;

    }

    展开全文
  • Q1:C语言程序 用指针实现字符串比较函数strcmp其实你这里主要问题是不能接收到两个输入的字符串。你这里的接受规则是输入两个字符串并用 , 号分隔,比如:abc,abc但是这里就有一个问题了!计算机怎么知道你输入的...

    Q1:C语言程序 用指针实现字符串比较函数strcmp

    其实你这里主要问题是不能接收到两个输入的字符串。

    你这里的接受规则是输入两个字符串并用 , 号分隔,比如:abc,abc

    但是这里就有一个问题了!计算机怎么知道你输入的,号是你输入的第一个字符串的一个字符呢?还是你两个字符串的分隔?

    所以当你输入abc,abc的时候计算识别你的第一个字符串是abc,abc

    第二个字符串为\n

    所以你这里得到的始终是1、至于解决的办法:

    让计算机识别你的分隔符号

    那方法就很多了,比如 scanf("%s%s",a,b);输入的时候用空白符(空格,tab,回车键)相间隔

    Q2:C语言,指针函数实现字符串的复制,连接,比较长度

    现写的差不多 看好给分

    字符串复制

    char* string_copy(char* pdest, char* psource)

    {

    if(psource == NULL)

    {

    pdest = NULL;

    return pdest;

    }

    while ((*pdest++=*psource++)!=\0);

    return pdest;

    }

    字符串连接

    char *string_strcat(char* s1, char* s2)

    {

    char *p = s1;

    while(*p++);

    --p;

    while(*p++ = *s2++)

    return s1;

    }

    字符串比较长度

    int string_compare(char* s1, char* s2)

    {

    char *p1 =s1;

    char *p2 = s2;

    int i =0, j=0;

    while(*p1++)

    ++i;

    while(*p2++)

    ++j;

    if (i > j) return 1;

    if (i == j) return 0;

    if (i < j) return -1;

    }

    Q3:C语言:用指针实现比较字符串的大小。。我写的有些问题·!!

    代码没什么问题,不过粗心而已。是个最常见最容易犯的错误。

    if(i==0) //

    printf("数组b=数组a\n");

    再者别用if,if if

    用if, else if , else 就行了

    Q4:C语言:用指针实现字符串大小的比较,应该怎样做呢?

    字符串比较,可采用循环遍历字符串,用对应位置的指针所指向的字符进行比较,当相等时,循环,遇到不等或其中一个字符串结束时,结束循环,返回对应指针的对应的字符的差值,根据差值判断两个字符串的大小:

    返回值大于0,则前串大,

    返回值小于0,则前串小,

    返回值等于0,两个字符串相等。

    参考代码:#includeintstringcompare(char*a,char*b)

    {

    while(*a&&*a==*b)

    {

    a++;

    b++;

    }

    return*a-*b;

    }

    intmain()

    {

    intret;

    chara[10];

    charb[10];

    printf("请输入字符串a:");

    gets(a);

    printf("请输入字符串b:");

    gets(b);

    ret=stringcompare(a,b);

    if(ret>0)

    printf("a>b\n");

    elseif(ret<0)

    printf("aelse

    printf("a=b\n");

    system("pause");

    return0;

    }

    运行结果:

    请输入字符串a: abcde

    请输入字符串b: acd

    a

    请输入字符串a: acd

    请输入字符串b: abcde

    a>b

    请输入字符串a: abc

    请输入字符串b: abc

    a=b

    WWw.Z★dYaN.cOm

    展开全文
  • C语言中没有提供字符串替换函数,网上能找到的类似函数也只是能替换一个,不能替换全部,工作中却常常要用到这个功能,故实现一个函数。该函数所使用到的相关函数均是自己实现,没有调用库函数。相关代码如下:/****...

    C语言中没有提供字符串替换函数,网上能找到的类似函数也只是能替换一个,不能替换全部,工作中却常常要用到这个功能,故实现一个函数。该函数所使用到的相关函数均是自己实现,没有调用库函数。

    相关代码如下:

    /********************************************************************

    *  Function:  my_strstr()

    *  Description: 在一个字符串中查找一个子串;

    *  Calls:      无;

    *  Called By:  无

    *  Input:      ps: 源;      pd:子串

    *  Output:    无;

    *  Return :    0:源字符串中没有子串; 1:源字符串中有子串;

    *  Author:      ChenZhiFa

    *  Others:      无;

    *  date of completion:

    *********************************************************************/

    char * my_strstr(char * ps,char *pd)

    {

    char *pt = pd;

    int c = 0;

    while(*ps != '\0')

    {

    if(*ps == *pd)

    {

    while(*ps == *pd && *pd!='\0')

    {

    ps++;

    pd++;

    c++;

    }

    }

    else

    {

    ps++;

    }

    if(*pd == '\0')

    {

    //sum++;

    return (ps - c);

    }

    c = 0;

    pd = pt;

    }

    return 0;

    }

    /********************************************************************

    *  Function:  memcpy()

    *  Description: 复制一个内存区域到另一个区域;

    *  Calls:      无;

    *  Called By:  无

    *  Input:      src: 源;

    count: 复制字节数.

    *  Output:      dest: 复制目的地;

    *  Return :      dest;

    *  Author:      ChenZhiFa

    *  Others:      无;

    *  date of completion:

    *********************************************************************/

    void * memcpy(void * dest,const void *src,size_t count)

    {

    char *tmp = (char *) dest, *s = (char *) src;

    while (count--)

    *tmp++ = *s++;

    return dest;

    }

    /********************************************************************

    *  Function:  str_replace()

    *  Description: 在一个字符串中查找一个子串,并且把所有符合的子串用

    另一个替换字符串替换。

    *  Calls:        memcpy();

    *  Called By:    无

    *  Input:      p_source:要查找的母字符串; p_seach要查找的子字符串;

    p_repstr:替换的字符串;

    *  Output:      p_result:存放结果;

    *  Return :      返回替换成功的子串数量;

    *  Author:      ChenZhiFa

    *  Others:      p_result要足够大的空间存放结果,所以输入参数都要以\0结束;

    *  date of completion:

    *********************************************************************/

    int str_replace(char *p_result,char* p_source,char* p_seach,char *p_repstr)

    {

    int c = 0;

    int repstr_leng = 0;

    int searchstr_leng = 0;

    char *p1;

    char *presult = p_result;

    char *psource = p_source;

    char *prep = p_repstr;

    char *pseach = p_seach;

    int nLen = 0;

    repstr_leng = strlen(prep);

    searchstr_leng = strlen(pseach);

    do{

    p1 = my_strstr(psource,p_seach);

    if (p1 == 0)

    {

    strcpy(presult,psource);

    return c;

    }

    c++;  //匹配子串计数加1;

    printf("结果:%s\r\n",p_result);

    printf("源字符:%s\r\n",p_source);

    // 拷贝上一个替换点和下一个替换点中间的字符串

    nLen = p1 - psource;

    memcpy(presult, psource, nLen);

    // 拷贝需要替换的字符串

    memcpy(presult + nLen,p_repstr,repstr_leng);

    psource = p1 + searchstr_leng;

    presult = presult + nLen + repstr_leng;

    }while(p1);

    return c;

    }

    测试代码如下:

    #define MAX 200

    int main(void)

    {

    int i = 0;

    char s[MAX] ={0};        //存放源字串

    char s1[MAX]={0};        //存放子字串

    char s2[MAX]={0};        //存放替换字串

    char result_a[2000] = {0};//存放替换结果;

    char *p,*ptm,*pr;

    puts("Please input the string for s:");

    scanf("%s",s);

    puts("Please input the string for s1:");

    scanf("%s",s1);

    puts("Please input the string for s2:");

    scanf("%s",s2);

    ptm = s;

    pr = result_a;

    i = str_replace(pr,ptm,s1,s2);

    printf("替换%d个子字符串;\r\n",i);

    printf("替换后结果:%s\r\n",result_a);

    system("pause");

    }

    运行结果如果:

    Please input the string for s:

    123123123123

    Please input the string for s1:

    23

    Please input the string for s2:

    abcdefg

    结果:

    源字符:123123123123

    结果:1abcdefg

    源字符:123123123123

    结果:1abcdefg1abcdefg

    源字符:123123123123

    结果:1abcdefg1abcdefg1abcdefg

    源字符:123123123123

    替换4个子字符串;

    替换后结果:1abcdefg1abcdefg1abcdefg1abcdefg

    请按任意键继续. . .0b1331709591d260c1c78e86d0c51c18.png

    展开全文
  • C/C++ code#include #include char ...int main() {while (1) {printf("请输入一行文字(空行结束),\"%%20\"将替换为\" \",\"你懂得\"将替换为\"XXXXXX\":\n");fgets(s,256,stdin);if ('\n'==s[0]) break;p=s;while (...
  • C语言函数实现 字符串替换

    千次阅读 2021-05-19 08:44:19
    void Substitute(char *pInput, char *pOutput, char *pSrc, char *pDst){char ...// 指向输入字符串的游动指针.pi = pInput;// 指向输出字符串的游动指针.po = pOutput;// 计算被替换串和替换串的长度.nSrcLen = st...
  • C语言实现字符串替换固定字符串 static void strreplece(char *str, const char *oldstr, const char *newstr) { char s_str[strlen(str)]; memset(s_str, 0, sizeof(s_str)); for(int i=0; i<strlen...
  • 描述:编写一个字符串替换函数,如函数名为 StrReplace(char* strSrc, char* strFind, char* strReplace),strSrc为原字符串,strFind是待替换的字符串,strReplace为替换字符串。举个直观的例子吧,如:...
  • 字符串替换是处理字符串时最常见的操作之一,也是学习字符串必须掌握的知识。本案例要求通过编程实现字符串“Good moring”到“Good evening”的转换。 案例分析 我们需要从字符串中被替换的位置开始,将要替换的...
  • 中文替换spa注意:短字符串替换成长字符串要注意内存越界.net函数代码/* 功 能:将str字符串中的oldstr字符串替换为newstr字符串* 参 数:str:操做目标 oldstr:被替换者 newstr:替换者* 返回值:返回替换以后的...
  • c语言替换字符串中的子串#include#includeint checkStr(char *s1, char *s2) //匹配字符串相不相等{for (int i = 0; i < strlen(s2); i++){if (s1[i] != s2[i]) return 0;}return 1;}void reStr(char *s1, char *...
  • C语言字符串替换

    千次阅读 2021-05-11 10:52:16
    C语言字符串替换 我的思路: 遍历字符串,判断是否与修改的字符一至 #include<stdio.h> int main() { int i=0; char ch; char replace; char buf[100] ={0}; printf("请输入一个字符串:\n"); scanf...
  • C语言指针实现字符串替换

    千次阅读 2021-04-08 09:22:23
    C语言指针实现字符串替换 好久没碰字符串指针,遇到了很多小的,有意思的问题。 题目 编写一个函数,函数原型为char * ReplaceString(char * str, char * s1, char * s2),该函数使用s2替换str中的s1,函数返回替换...
  • 1. 替换或删除字符串中的子字符串字符串的删除很简单,用后面的数据替代前面的数据就实现了;但是,替换字符串缺比较复杂。我们需要通过指针实现字符串的查找,最后插入新的字符串。函数参数说明:string - 原始字符...
  • C语言替换字符串

    2021-05-22 07:51:48
    #include #include #include /**** @author: cnscn@163.com* @reference: lovesnow1314@http://community.csdn.net/Expert/TopicView3.asp?id=5198221** 用新子串newstr替换字符串src中的前len个字符内所包含的...
  • C语言中的字符串替换

    2021-05-19 08:04:49
    输入参数:char* search 需要搜索的字符串char* replace 被替换字符串char* str 原始字符串返回 char* 用完后用free()释放[codesyntax lang=”c” lines=”normal”]/**Function:str_replace*Parameter:char* ...
  • #includeusing namespace std;void strReplace1(char* strSrc, char* strFind, char*strReplace){if(strSrc==NULL||strFind==NULL||strReplace==NULL)return;char *replace=strReplace;char *find = strFind;...
  • 不调用库函数,自己实现字符串替换操作,函数原型为: int str_replace(const char *in, char *out, int outlen, const char *oldstr, const char *newstr); 参数说明: in, 原始字符串,保持不变 out, 存放...
  • C语言字符串修改、替换部分字符串

    千次阅读 2021-05-08 09:47:48
    #include #include char *strpl(char *str, char *old, char *new) { char *p = NULL; int len = 0; char newstr[64] = {0};... 说明:只支持修改字符串中第一个old,old可以在字符串前中后位置
  • 如果按照普通的定义字符串就会出现以下错误:解决方法如下:将双引号改成单引号:lr_searchReplace(abc,"test",‘ ‘,‘+‘);Action也可以这些写:voidlr_searchReplace(char*inputStr,char*outputStr,...
  • c++语言程序设计习题之字符串替换某个元素,也就是要替换掉替换空格。c++如何替换掉指定的字符。...解题思路:从后往前替换,减少数据移动次数,时间复杂度为O(n)字符串替换实现的代码实例:#include #include using ...
  • C语言 字符串替换 replace

    千次阅读 2020-12-26 10:03:58
    C语言 字符串替换 replace 用的函数strlen 和mallo 实现c语言的replace int *replace(char *p, char *dest, char *target){ int d_=strlen(dest);int t_ = strlen(target);int p_ = strlen(p); int compare = t_ -...
  • // src,要替换字符串 // dst,替换成什么字符串 char *strrpl(char *in, char *out, int outlen, const char *src, char *dst) { char *p = in; unsigned int len = outlen - 1; // 这几段检查.
  • C语言文件中字符串的查找与替换?#include#include#include#includeint Count=0;int findNum(char *str){int i=0,t1=0;FILE *p;char ch;if((p=fopen("image.gl","rb"))==NULL){printf("\n打开文件失败\n");exit(4);}...
  • /*功能:将str字符串中的oldstr字符串替换为newstr字符串*参数:str:操作目标oldstr:被替换者newstr:替换者*返回值:返回替换之后的字符串*版本:V0.2*/char*strrpc(char*str,char*oldstr,char*newstr){char bstr...
  • C语言实现——字符串逆序

    千次阅读 2021-09-29 13:12:12
    1.设立一个数组存放输入的字符串 2.将输入的字符串整体逆序 2.1计算字符串长度 2.2使用函数来实现倒置 2.3实现函数reverse 3.将其中每个单词再进行逆序 3.1整个语句如何结束循环 3.2每个单词的结束位置 3.3...
  • [C] 纯文本查看 复制代码#include #include int substitute(char* str, char* pattern, char* replace){int scnt;int pcnt;int i;int subCnt = 0;scnt = 0;while (*(str+scnt) != '\0'){pcnt = 0;...
  • C语言实现分割字符串

    2021-05-19 08:16:13
    以前从没有用c语言实现,都是使用python的split()函数,python处理起来很简单.split()方法语法:str.split(str="", num=string.count(str)).• str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 84,915
精华内容 33,966
关键字:

c语言如何实现字符串替换

c语言 订阅