首页 > 代码库 > C字符串的小问题

C字符串的小问题

string与char *、char[]之间的转换

提示

string可以被看成是以字符为元素的一种容器。字符构成序列(字符串)。有时候在字符序列中进行遍历,标准的string类提供了STL容器接口。具有一些成员函数比如begin()、end(),迭代器可以根据他们进行定位。
与char 不同的是,string不一定以NULL(‘\0‘)结束。string长度可以根据length()得到,string可以根据下标访问。所以,不能将string直接赋值给char 

string转换成char *

string有2个函数可以将string直接转换成const char *类型。
一个是.c_str(),一个是data成员函数。

string s1 = "abcdeg";
const char *c_s1 = s1.c_str();
const char *c_s2 = s1.data();

这种方法只能转换成const char,如果去掉const编译不能通过。
如果要转换成char
,可以用string的一个成员函数copy实现。

string s1 = "abcdefg";
char *c_s1;
int len = s1.length();
c_s1 = (char *)malloc((len+1)*sizeof(char));
s1.copy(c_s1,len,0);

char *和char []转换成string

这种方式可以直接赋值:

string s;
char *p = "abcdegf";
s = p;

字符串操作――得到没有路径的文件名的小程序

给定一个文件的绝对路径,得到没有路径目录的文件名
主要思路是定义一个指向该字符串的char指针p,遍历整个字符串,当遇到‘/‘或‘\‘的时候用filename_withoutpath指针变量记录下位置,直到遍历完整个字符串,输出的filename_withoutpath所指向的首地址就是文件名的起始位置。

char* filename_withoutpath = NULL;
char* p = NULL;
p = filename_withoutpath = filename_absolutepath;
while ((*p) != '\0')
{
    if (((*p)=='/') || ((*p)=='\\'))
        filename_withoutpath = p+1;
    p++;
}
\\filename_withoutpath指向的位置就是文件名的首地址
\\如果要得到该文件所在的路径的话,可以:
\\*filename_withoutpath = '/0';
\\则filename_absolutepath即得到该文件的路径

转载请注明作者Jason Ding及其出处
Github博客主页(http://jasonding1354.github.io/)
CSDN博客(http://blog.csdn.net/jasonding1354)
简书主页(http://www.jianshu.com/users/2bd9b48f6ea8/latest_articles)

C字符串的小问题