java基础改学C++(五)数组(2)字符串
//字符数组与字符串处理
#include <iostream>
//导入
#include "string"
using namespacestd;
int main(){
// 1 声明与初始化
//2 C++将字符串作为字符数组来处理。字符串常量:“CHINA”,被处理成一个无名的、字符型一维数组:
//C++语言中约定用‘\0’作为字符串的结束标志,它占内存空间,但不计入串长度。有了结束标志‘\0’后,程序往往依据它判断字符串是否结束,而不是根据定义时设定的长度!!!
因此
char c[] ="dasdeas",f[] = {"wcao!"};
char d[][8] = {"dd啊aw","dsrd1wa"};//因为其每一行最后都是 \0,所以字符串最长是7,8-1
char e[10] ="CHINA";//内存里:
// 可以自己写上 \0 ,效果一样:
char g[] ="Test\0";
char h[] = {'a','b','c','\0'};
char str[10];
//str = "12334";报错!别忘了数组名是地址!怎么能赋一个字符串呢?
//解决:1.在定义时候就赋值
char str2[12]="The String";
//或者:2. cin
cin>>str;//和java输入一样,遇到空格之后是下一个变量的内容了,所以输整行的话 改为
cin.getline(str2,11);//让键盘收11个,为什么自己想
//java里String类的方法多,C艹也有。导入 string 注意 所有字符串处理函数的实参都是 字符数组名(指针)
// 3.1 拼接到第一个参数上:单词 concatenate
char str1[20] = {"123+"};
char str3[5] = {"321"};
strcat(str1, str2); //无返回值
// 注意:
(下面演示的是static char,不用管 重点看函数的使用)
// 3.2 复制
strcpy(str1, str3);
// 记住:被修改的是第一个参数
strncpy(str1,"eqwedwrdws",5);//限制copy几位。
// 3.3 比较 返回值:第一个出现不同字符的ASCII码差值左减右 .完全相同为0
int distance =strcmp(str1, str2);
cout<<distance<<endl;
// 3.3.2 限制比较时最多后延几位
distance = strncmp(str1, str2,5);//刚才的复制还有别的方法也都有相似的方法,不写了
// 3.4 数组长度。。。。终于等到这个方法了!!!!
cout<<strlen(str1)<<endl;
// 注意。长度不包括 \0
char strr[20] ="wocao\0 easf\0s";
cout<<strlen(strr)<<endl;//输出5
// 3.5 转换大小写字母(java: toLowerCase(),toUpperCase())草太多了好烦 学java的自己猜吧不写了
// 4 下面,java最熟悉的 string类来了!!!!别忘了倒入 string
string a32 ="dssrws";
string a342;
a342 = a32;
//比较可以直接用 > < ==
// 奇妙之处:
//1.
a342[5] ='w';
//2.
a32 = strr;
cout<<a32<<endl;
//3.
a32 = "123456789\00";
cout<<a32<<endl;//也是遇 \0 停
//另外,若一行字符串最后一个字符是 '\' 是续行符,看例子:
cout<<"We have to good good s\
tudy! ---------------------\n"; //可正常打印
//然后String的方法基本也能猜就不写了
//最后说明:尽量用 string类的方法。因为字符数组是为了兼容C。更新换代了
cout<<endl;
}