(c++或C语言)查找文件中字符串的位置?
#include<stdio.h>#include<iostream>usingnamespacestd;intmain(){FILE*f=fopen("C:\\bb.t...
#include<stdio.h>
#include <iostream>
using namespace std;
int main()
{
FILE*f=fopen("C:\\bb.txt","r");
if(NULL==f)
{ return -1;//要返回错误代码
}
char buf[]={512};
int r=fread(buf,1,256,f);
int s=0,count=0;
while(r>0)
{
char *pos;
if(pos=strstr(buf,"中国"));
{
printf("find at pos %d\n",s+(pos-buf));
s+=r;
}
return 0;
}
}
这个pos的位置为什么是s+(pos-buf))?
pos是在BUF中的指针是第几个,为什么要加?
懂的朋友画图表示下,实在不太理解这个定位! 展开
#include <iostream>
using namespace std;
int main()
{
FILE*f=fopen("C:\\bb.txt","r");
if(NULL==f)
{ return -1;//要返回错误代码
}
char buf[]={512};
int r=fread(buf,1,256,f);
int s=0,count=0;
while(r>0)
{
char *pos;
if(pos=strstr(buf,"中国"));
{
printf("find at pos %d\n",s+(pos-buf));
s+=r;
}
return 0;
}
}
这个pos的位置为什么是s+(pos-buf))?
pos是在BUF中的指针是第几个,为什么要加?
懂的朋友画图表示下,实在不太理解这个定位! 展开
1个回答
展开全部
头文件:#include <string.h>
strchr() 用来查找某字符在字符串中首次出现的位置,其原型为:
char * strchr (const char *str, int c);
【参数】str 为要查找的字符串,c 为要查找的字符。
strchr() 将会找出 str 字符串中第一次出现的字符 c 的地址,然后将该地址返回。
注意:字符串 str 的结束标志 NUL 也会被纳入检索范围,所以 str 的组后一个字符也可以被定位。
【返回值】如果找到指定的字符则返回该字符所在地址,否则返回 NULL。
返回的地址是字符串在内存中随机分配的地址再加上你所搜索的字符在字符串位置。设字符在字符串中首次出现的位置为 i,那么返回的地址可以理解为 str + i。
提示:如果希望查找某字符在字符串中最后一次出现的位置,可以使用 strrchr() 函数。
【实例】查找字符5首次出现的位置。
复制纯文本新窗口
#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ char *s = "0123456789012345678901234567890"; char *p; p = strchr(s, '5'); printf("%ld\n", s); printf("%ld\n", p); system("pause"); return 0;}
strchr() 用来查找某字符在字符串中首次出现的位置,其原型为:
char * strchr (const char *str, int c);
【参数】str 为要查找的字符串,c 为要查找的字符。
strchr() 将会找出 str 字符串中第一次出现的字符 c 的地址,然后将该地址返回。
注意:字符串 str 的结束标志 NUL 也会被纳入检索范围,所以 str 的组后一个字符也可以被定位。
【返回值】如果找到指定的字符则返回该字符所在地址,否则返回 NULL。
返回的地址是字符串在内存中随机分配的地址再加上你所搜索的字符在字符串位置。设字符在字符串中首次出现的位置为 i,那么返回的地址可以理解为 str + i。
提示:如果希望查找某字符在字符串中最后一次出现的位置,可以使用 strrchr() 函数。
【实例】查找字符5首次出现的位置。
复制纯文本新窗口
#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ char *s = "0123456789012345678901234567890"; char *p; p = strchr(s, '5'); printf("%ld\n", s); printf("%ld\n", p); system("pause"); return 0;}
追问
和我说的不一样啊,pos是相对buf的地址啊!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询