字符串专题
来源:互联网 发布:光环国际教育 大数据 编辑:程序博客网 时间:2024/06/05 17:15
********************
char *filename="asdP/asdf/jjjj/uu";
char *p = NULL;
p = strchr(filename, '/');//在filename中匹配'/'返回首次匹配到的地址
if(p != NULL) *p = '_';
运行结果:Segmentation fault
原因:“asdP/asdf/jjjj/uu”是常量值,所以不可以修改,因此也可以看出,如果采用这种字符串赋值方法,必须用const char *filename="asdP/asdf/jjjj/uu";
纠正:char filename[]="asdP/asdf/jjjj/uu";
************************
技巧性用法:
char *s = NULL;
while( (s=strchr(filename, '/')) !=NULL )
*s='_';
std::cout<<filename<<endl;
运行结果:asdP_asdf_jjjj_uu
执行过程:s=NULL, while 1次s=/asdf/jjjj/uu, while 2次s=/jjjj/uu, while 3次s=/uu。对于一个字符串,指针指向其中一个字符时候不单是指这一个字符,而是从这个
字符开始一直到\0位置。
追加:输出s的话就是该指针后面到\0的字符串,但是如果输出*s的话,只输出当前指针所指向的字符
****************************
字符指针引用的错误用法
bool find(char*& ptr);
char array[]=" n iha o";//一共10个字符,加上\0
bool result = find(array);//报错char*&和char*不匹配
运行结果:error: invalid initialization of non-const reference of type ‘char*&’ from a temporary of type ‘char*’
原因:array虽然可以退变为指针,但是它是暂时的,实际还是array[10],所以不能匹配char*&
纠正:char *p=array; bool result = find(p);
*******************************
数组名不可以当成变量自加自减运算
char ite[1024]; //会出错,应该是char ite[1024]={'\0'}; char *s = ite;
const char * p="nihao";
while(*p!='\0')
{
*ite=*p;
ite++;
p++;
}
运行结果:error: invalid lvalue in assignment
原因:数组名不是变量,不可以作为左值,lvalue是左值的意思
纠正:重新申请一个变量指向数组,然后用该变量进行自增等其他运算
提升:while循环内部可以改成 *s++=*p; (*s++相当于,先取s,然后*s,然后s++)
************************************
从文件中按行读取字符串
vector<char *> files; //文件名都存在这个vector中
vector<char *> filecontent; //读入的所有文件每一行的内容
FILE *inflie;
char buf[1024];
for(int i = 0; i<files.size(); i++)
{
infile = fopen(files[i], "r");
if(infile)
{
while(fgets(buf, 1024, infile)!=NULL) //循环读入一个文件的每一行内容
{
//处理读入一行的内容
int j=1;
while(buf[j]!='\0' && buf[j]!='\n') j++; //去掉回车'\n' ----stage1
buf[j]='\0';
j=0;
while(buf[j]!='\0'&&isspace(buf[j])) j++; //去掉每行前面的空格 -------stage2
if(buf[j] == '#' || buf[j]=='\0') continue; //最终获得的字符串,如果以#开头或者没有内容则舍弃掉这一行
filecontent.push_back(strdup(&buf[j])); //从前面可知,&buf[j]表示指针,又因为是字符串,所以指的是该指针后面所有的字符串
}
fclose(infile);
}
}
文件中:| VB_CV 54 L _BB\n|
stage1: | VB_CV 54 L _BB\0|
stage2: |VB_CV 54 L _BB\0|
************************************************
- 字符串专题
- 字符串专题
- 字符串专题
- 字符串专题
- 专题:字符串
- 字符串专题
- 字符串专题
- PHP 截取字符串专题
- PHP 截取字符串专题
- PHP 截取字符串专题
- PHP 截取字符串专题
- PHP 截取字符串专题
- 面试题目 字符串专题
- PHP 截取字符串专题
- js字符串处理专题
- PHP 截取字符串专题
- 【面试】字符串专题
- 面试题目 字符串专题
- 统计学习方法概论
- ES6 -- 新的数据结构:Set和Map
- Can OGG Version 11 Be Used to Pump/Move Trails Generated from Version 9 or 10? (文档 ID 1297283.1)
- SpringMVC预处理方法参数HandlerMethodArgumentResolver类
- vivado编译综合全部通过但仿真却无法打开
- 字符串专题
- json11 c++ 用法
- rman创建备份
- 2015-12-09
- 1014. 福尔摩斯的约会 (20) PAT
- java多线程和并发面试(转)
- 一步一步编写自己的Web MVC框架——前言
- js中的原型
- 左右滑动的布局