c语言字符串替换函数 我写的编译没有问题 运行起来可是啥都没有显示 请问哪位大神能看出来哪里有错啊!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言字符串替换函数 我写的编译没有问题 运行起来可是啥都没有显示 请问哪位大神能看出来哪里有错啊!相关的知识,希望对你有一定的参考价值。
#include<stdio.h>
#include<string.h>
void replace_string(char *c,const char *p,const char *r);
main()
char a[15]="krisde",*a1="risd",*a2="jan";
replace_string(a,a1,a2);
return 0;
void replace_string(char *c,const char *p,const char *r)//r替换C中的P
int len,lenr,i,num,left;
int id=0;
char *z,*q;
const char *pr;
while(*c!='\0')
if(*c!=*p)
id++;
*c++;
num=strlen(p);
len=strlen(c);
lenr=strlen(r);
left=len-id;
z=c+len;
q=z+lenr-num;
for(i=1;i<=left+1;i++)
*q--=*z--;
z=c+id;
pr=r;
while(*pr!='\0')
*z++=*pr++;
puts(c);
首先在函数
void replace_string(char *c,const char *p,const char *r)//r替换C中的P
中
if(*c!=*p)
中的 *c 表示什么 ?
*c 表示c[0] 也就是c字符串的第一个字符 'k'
那么*c++ 呢 表示c[0]++ 也就是c[0]的值从k 变成 l,m,n,。。。。。
整个程序问题蛮多的,关键是概念性的东西不懂
如果想判断两个字符串是否相等 或者使用函数strcmp
或者逐个字符判断是否相等,可不是想象中的
if(*c!=*p)追问
那你说怎么求id啊 这里id是第一个相同字符的下标
追答最直接的办法肯定是逐个字符匹配
如果你想深入研究,可以去研究 KMP算法
这样是对的吗
参考技术A replace中的*c++;似乎应该是c++;吧?但如果真是c++了,后面len=strlen(c);求出来的长度就不是整个字符串的长度了……C语言宏定义
对一个c语言进行编译预处理时,可检查宏定义的语法错误。为什么是错的
楼主看看书,仔细看看编译预处理都做了哪些事情。程序设计语言的预处理的概念:在编译之前进行的处理。 C语言的预处理主要有三个方面的内容: 1.宏定义; 2.文件包含; 3.条件编译。 预处理命令以符号“#”开头。
宏定义又称为宏代换、宏替换,简称“宏”。预处理制作单纯的宏展开,并不是检查语法错误,所说义是错误的。
语法错误都是编译阶段才检查的。预处理是不检查的。 参考技术A 宏定义又称为宏替换,c语言中的宏定义只是简单的字符串替换而已。
比如
define
n
1000
在程序中遇到n就自动把n替换成1000,n不是一个变量,不能赋值。
如果你写n=1;
相当于写1000=1;
这编译是通不过的,所以你使n的值改变是做不到的。
n只是一个要被替换的记号而已,连变量也不是。 参考技术B 你指的?:是三目运算符。那个就是比较大小,举个例子A>B?A:B,A>B成立整个式子的值就是A反之为B,这个你应该懂吧!若真是那些双目运算符你不懂,那就去好好重新在看遍书啊,那是基础中的基础
PR(x<y?x++:y++);/*这个是因为++的问题,++在后意思是先把值赋给x,然后在进行加1*/
PR(
y
);这行y不是等于2吗?
输出怎么是3
最后一行
PR(
y
);又得4。这是因为y有进行++计算 参考技术C 1.不需要加分号。
2.它和头文件是同一个意思,在程序预处理时处理。宏的作用就是防止出错,一改全改。不用在程序中逐一修改,降低错误。 参考技术D 贴图,不然谁知道为什么错的
以上是关于c语言字符串替换函数 我写的编译没有问题 运行起来可是啥都没有显示 请问哪位大神能看出来哪里有错啊!的主要内容,如果未能解决你的问题,请参考以下文章