字符串
1.C语言字符串
1.1表示形式
1.1.1字符
字符用单引号包含,实际上代表一个整数,整数值就是这个字符的ASCII值大小,如‘a’跟97(十进制)的含义是严格一致的,甚至可以互换。
char ch=’a’;
printf(“%c”,a);
1.1.2字符串
头文件#include <string.h>
双引号括起来的字符,实际代表一个指向无名数组起始字符的指针,这个无名数组被双引号之间的字符串和一个字符‘\0’初始化,而且这个数组内部数据是只读的,无法修改。
表示方法有:
// 字符数组形式,由字符串”abcd”和’\0’组成,可以修改值,即可以执行a[2]=’s’;越界不会报错,即可访问a[1000].
char str[]=”abcd”;
printf(“%s”,str); //输出字符串
printf(“%c”;str[1000]); //输出字符
printf(“%c”;*(str+1000)); //输出字符
// 字符数组形式,由字符串”abcd”和’\0’组成,不可修改值,越界不会报错,即可访问a[1000].
char *str=”abcd”;
printf(“%s”,str); //输出字符串
printf(“%c”;str[1000]); //输出字符
printf(“%c”;*(str+1000)); //输出字符
// 字符串常量,可以这样使用
printf(“%s”,”abcd”); //输出字符串
printf(“%c”;*[“abcd”+1]); //输出字符
// 通过宏定义定义字符串,相当于str=”abcd”;
#define str “abcd”
printf(“%s”,str); //输出字符串,这能这样做
1.1.3关于字符串结尾的’\0’
在C语言中,字符串就是一串以NUL字节结尾的字符序列。NUL虽是字符串的终结符,但它本身并不是字符串的一部分。NUL是ASCII字符集中 ‘\0’ 字符的名字,是1个字节域的全0;NULL是一个数值为0的指针,通常是占用4个字节域的全0。虽然它们都是0,甚至某些场合可以互换使用(不考虑数据宽度),但实际工程中还是要使用适当的常量,因为它可以传递给读者更多信息。
1.2字符串操作函数大全
参见http://www.jb51.net/article/37410.htm
2.C++字符串
2.1字符
和C语言char一样。
2.2字符串
头文件#include <string>
c++中的字符串string是一个类,具体使用方法参见
http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html
http://blog.csdn.net/tzheng2008/article/details/7342562
2.2.1字符串分割
a).使用strtok函数分割(C函数)
stringstr = "1 1 2 3 4;4 5 8 6 4;54 5 4";
char *str1 = (char*)str.c_str();//转化为C风格的字符串
char *temp;
cout << strtok(str1,";") << endl;
while (temp=(strtok(NULL, ";"))){
cout << temp <<endl;
}
//该函数在处理一个字符串时第一次调用第一个参数是string,但第二次调用第一个参数必须为NULL,否则它只会从字符串的开始进行分割,不会接着上面一次分割完的子串进行分割,因此用循环的话第一次调用要区分开。
b).使用STL库的函数进行分割
std::vector<std::string> split(std::string str,std::string pattern){
std::string::size_type pos;
std::vector<std::string> result;
str+=pattern;//扩展字符串以方便操作
int size=str.size();
for(int i=0; i<size; i++){
pos=str.find(pattern,i);
if(pos<size){
std::string s=str.substr(i,pos-i);
result.push_back(s);
i=pos+pattern.size()-1;
}
}
return result;
}
c).使用boost库函数进行分割
略