
正文
C语言find查找字符串,c语言 查找字符串
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
C语言文件中字符串的查找与替换
#includestdio.h
#includeconio.h
#includestring.h
#includestdlib.h
void Substitute(char *pInput, char *pOutput, char *pSrc, char *pDst)
{
char *pi, *po, *p;
int nSrcLen, nDstLen, nLen;
// 指向输入字符串的游动指针.
pi = pInput;
// 指向输出字符串的游动指针.
po = pOutput;
// 计算被替换串和替换串的长度.
nSrcLen = strlen(pSrc);
nDstLen = strlen(pDst);
// 查找pi指向字符串中第一次出现替换串的位置,并返回指针(找不到则返回null).
p = strstr(pi, pSrc);
if(p)
{
// 找到.
while(p)
{
//计算被替换串前边字符串的长度.
nLen = (int)(p - pi);
// 复制到输出字符串.
memcpy(po, pi, nLen);
memcpy(po + nLen, pDst, nDstLen);
// 跳过被替换串.
pi = p + nSrcLen;
// 调整指向输出串的指针位置.
po = po + nLen + nDstLen;
// 继续查找.
p = strstr(pi, pSrc);
}
// 复制剩余字符串.
strcpy(po, pi);
}
else
{
// 没有找到则原样复制.
strcpy(po, pi);
}
}
int main(int ac, char *av[])
{
if (ac!=5) {
printf("程序名 要操作的文件 新文件 查找的字符串 替换的字符串\n");
printf("示例:test.exe 1.txt 2.txt hello love\n");
return 0;
}
const int MAXSIZES = 100;
FILE *fpSrc,*fpDes;
char filename1[20]="1.txt";
char filename2[20]="2.txt";
//要求查找的字符串,替换的字符串;
char ps[]="hello";
char pd[]="love";
//求取所查找和替换的字符串的长度;
int len_src=strlen(av[3]);
int len_des=strlen(av[4]);
//定义存储字符串缓冲区;很奇怪的一点是,fgets函数不能将字符串写入动态分配的内存中
/*char* Src_buf=(char*)(sizeof(char)*MAXSIZES);
char* Cpy_buf=(char*)(sizeof(char)*MAXSIZES);
char* Des_buf=(char*)(sizeof(char)*MAXSIZES);*/
char Src_buf[MAXSIZES] = {0};
char Cpy_buf[MAXSIZES] = {0};
char Des_buf[MAXSIZES] = {0};
//打开文件
if((fpSrc=fopen(av[1],"r+"))==NULL)
{
printf("fail to open the file1 !\n");
exit(1);
}
if((fpDes=fopen(av[2],"a+"))==NULL)
{
printf("fail to open the file2 !\n");
exit(1);
}
//进行循环读取
while(!feof(fpSrc))//判断文件是否已结束;!feof(fpSrc)
{
fgets(Src_buf,MAXSIZES,fpSrc);
Substitute(Src_buf,Des_buf,av[3],av[4]);
fputs(Des_buf,fpDes);
printf("%s",Des_buf);
}
fclose(fpSrc);
fclose(fpDes);
system("pause");
return 0;
}
说明:使用c标准为中的文件I/O函数一般是不推荐的,做为练习可以学习,真正用的最多的是内存文件映射。那要比用I/O函数读来读取方便的多,限制也会更小。
相关问答
Q1: c语言如何查找字符串?
C语言中的标准函数库中的strchr()函数可以实现查找字符串中的某个字符。
C语言strchr()函数:
查找某字符在字符串中首次出现的位置
头文件:#include string.h
strchr() 用来查找某字符在字符串中首次出现的位置,其原型为:
char * strchr (const char *str, int c);
【参数】str 为要查找的字符串,c 为要查找的字符。
strchr() 将会找出 str 字符串中第一次出现的字符 c 的地址,然后将该地址返回。
注意:字符串 str 的结束标志 NUL 也会被纳入检索范围,所以 str 的组后一个字符也可以被定位。
【返回值】如果找到指定的字符则返回该字符所在地址,否则返回 NULL。
返回的地址是字符串在内存中随机分配的地址再加上你所搜索的字符在字符串位置。设字符在字符串中首次出现的位置为 i,那么返回的地址可以理解为 str + i。
提示:如果希望查找某字符在字符串中最后一次出现的位置,可以使用 strrchr() 函数。
Q2: C语言 字符串操作 如何从末尾查找字符
其实这个函数你可以自已写的
#include stdio.h
#include stdlib.h
#include string.h
int findrstr(const char *str, char ch) {
if(NULL == str) return -1;
const char *s = str + strlen(str) - 1;
int ix = strlen(str) - 1;
for(; ix = 0; --ix, --s) {
if(*s == ch) return ix;
}
return -1;
}
int main(int argc, char *argv[])
{
const char *msg = "hello,world!!!";
printf("%c", msg[findrstr(msg, 'w')]);
return 0;
}
Q3: c语言如何对字符串进行位置查询
包含文件:string.h
函数名: strstr
函数原型:
extern char *strstr(char *str1, const char *str2);
语法:* strstr(str1,str2)
str1: 被查找目标 string expression to search.
str2: 要查找对象 The string expression to find.
返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。
例子:
char str[]="1234xyz";
char *str1=strstr(str,"34");
cout str1 endl;
显示的是: 34xyz
函数实现
1.Copyright 1990 Software Development Systems, Inc.
char *strstr(const char *s1,const char *s2)
{
int len2;
if(!(len2=strlen(s2)))//此种情况下s2不能指向空,否则strlen无法测出长度,这条语句错误
return(char*)s1;
for(;*s1;++s1)
{
if(*s1==*s2 strncmp(s1,s2,len2)==0)
return(char*)s1;
}
return NULL;
}
2.Copyright 1986 - 1999 IAR Systems. All rights reserved
char *strstr(constchar*s1,constchar*s2)
{
int n;
if(*s2)
{
while(*s1)
{
for(n=0;*(s1+n)==*(s2+n);n++)
{
if(!*(s2+n+1))
return(char*)s1;
}
s1++;
}
return NULL;
}
else
return (char*)s1;
}
3. GCC-4.8.0
char *strstr(const char*s1,const char*s2)
{
const char*p=s1;
const size_tlen=strlen(s2);
for(;(p=strchr(p,*s2))!=0;p++)
{
if(strncmp(p,s2,len)==0)
return (char*)p;
}
return(0);
}
应用举例
// strstr.c
#include syslib.h
#include string.h
main()
{
char *s="GoldenGlobalView";
char *l="lob";
char *p;
clrscr();
p=strstr(s,l);
if(p)
printf("%s",p);
else
printf("NotFound!");
getchar();
return0;
}
//功能:从字串” string1 onexxx string2 oneyyy”中寻找”yyy”
(假设xxx和yyy都是一个未知的字串)
char *s=”string1onexxxstring2oneyyy”;
char *p;
p=strstr(s,”yyy”);
if(p!=NULL)
printf(“%s”,p);
else
printf("notfound\n");
说明:如果直接写语句p=strstr(s,”one”),找到的是onexxxstring2oneyyy
char *mystrstr(char*s1,char*s2)
{
if(*s1==0)
{
if(*s2)
return (char*)NULL;
return (char*)s1;
}
while(*s1)
{
int i=0;
while(1)
{
if(s2[i]==0)
return s1;
if(s2[i]!=s1[i])
break;
i++;
}
s1++;
}
return (char*)NULL;
}
Q4: c语言查找字符串
字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的,如s=“abcdefghij”,则s[1]=“b”,s[9]="j",而字符串的零位正是它的长度,c语言查找字符串方法为:
1、首先,定义一个字符数组变量,可以这么写。
2、然后输入字符的长度。
3、接下来就可以直接赋值字符串。
4、也可以定义多个字符串,可以写成这样。
5、使用字符串时,建议加上该头文件。
6、此外,还可以使用函数为其初始化。
注意事项:
尽管形式字符串可以有任意(但有限)的长度,实际语言的字符串的长度经常被限制到一个人工极大值。有两种类型的字符串数据类型: “定长字符串”,它有固定的极大长度并且不管是否达到了这个极大值都使用同样数量的内存。
Q5: c语言筛选对应字符串
由于测试,我代码中“要查找的字符串”和“目标字符串”,我都用常量赋值了。如果你想写手动输入字符串或从文件读取,自己写输入赋值给这个两个变量就行。
代码主要功能:SINX *findStr(int benIndex,char *tStr,char *fStr);
从目标字符串tStr中查找指定的字符串fStr,benIndex是查找的起始位置,首次调用benIndex=0。
查找下一个时,benIndex取上次查找返回值SINX-endIndex+1。
#include stdio.h
#include malloc.h
#include string.h
typedef struct strIndex//查找字符串在目标字符串中首字符下标和尾字符下标
{
int benIndex;
int endIndex;
}SINX;
SINX *findStr(int benIndex,char *tStr,char *fStr);//benIndex:查找的起始下标。找到则返回对应下标结构,未找到返回NULL
int main()
{
SINX *findSINX=NULL;
int n,benIndex=0;
//tStr:目标字符串,fStr:要查找的字符串
char *tStr="djasdasl aaa djsalkdjsakdj aaa dsakd;sakd;all";
char *fStr="aaa";
printf("查找字符串:\n%s\n",fStr);
printf("目标字符串:\n%s\n",tStr);
while(1)
{
findSINX=findStr(benIndex,tStr,fStr);
if(findSINX)
{
printf("\n找到!!,首字符在第%d个字符位置,尾字符在第%d个字符位置\n",findSINX-benIndex+1,findSINX-endIndex+1);
printf("\n1、查找下一个;2、结束; 输入:");
n=scanf("%d",n);
if(n==1)
benIndex=findSINX-endIndex+1;
else
break;
}
else
break;
}
return 0;
}
SINX *findStr(int benIndex,char *tStr,char *fStr)//benIndex:查找的起始下标。找到则返回对应下标结构,未找到返回NULL
{
int tLen=strlen(tStr),fLen=strlen(fStr),i,j,k;
SINX sinx,*reSINX=NULL;
sinx.benIndex=sinx.endIndex=-1;
for(i=benIndex;itLen;i++)
{
k=i;
for(j=0;jfLen;j++)
{
if(tStr[k]!=fStr[j])
break;
else
if(sinx.benIndex==-1)
sinx.benIndex=k;
k++;
}
if(j==fLen)
{
sinx.endIndex=k-1;
break;
}
else
sinx.benIndex=sinx.endIndex=-1;
}
if(sinx.benIndex==-1)
return NULL;
reSINX=(SINX *)malloc(sizeof(SINX));
if(!reSINX)
{
printf("异常!查找失败!");
return NULL;
}
*reSINX=sinx;
return reSINX;
}
C语言find查找字符串的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言 查找字符串、C语言find查找字符串的信息别忘了在本站进行查找喔。








