String&数组型字符串的使用
库 cstring 字符串长度问题
新建变量: string str
赋值过程
新建赋值: string str = “aaa” (范例)
输入赋值 : cin >> 字符串名 ->> 这样操作的话会自动去掉开头所有的空格
getline(cin,字符串名) ->> 不会去掉开头的空格
->> 两个getline连用可能会导致第二个getline 失效,所以最好是第二个就用cin>>
从txt文件中赋值: (instream.open) + getline(instream.line) 一整行赋值给string型变量line
----文件赋值过程可能会遇到的问题-----:
1. 每一行都会遇到回车,如果不解决这个回车会导致下一个stirng 数组元素为回车号,解决办法: 在
getline之后,在加上一句in.get()但是不将它赋给变量,就可以自动吸收这个回车号;
2. 去除所有空格键 / 替换字符串中的内容 #######暂时还没试用成功
str= str.replace(str.find("@"), 1, ""); 将第一个遇到的@替换为空
关于replace的用法更多见:http://blog.csdn.net/yinhe888675/article/details/50920836
3. s.erase(0,s.find_first_not_of(" ")); 去首空格
s.erase(s.find_last_not_of(" ") + 1); 去尾空格
4. 去掉string的第x位到第y位字符 string.erase(x,y)
string处理: 回车号: 回车号会被单独认为是一个变量 ->> in.get() 会自动吸收一个回车 可以解决这个问题
字符串首尾空格 :这里的array[ ]是一个字符串数组
unsigned long s = array[l].find_first_not_of(” \t”);
unsigned long e = array[l].find_last_not_of(” \t”);
array[l] = array[l].substr(s, e - s + 1);
遍历string数组 : 在for-loop 或者 while-loop中,检测条件用while(string != “”)
用string[i] != ” ” 的方法已被证实为没用 (这是一个空格键)
但是用string[i]!= “”的方法目前来看是有效的 (这里什么都没有)
作为形参 string + 字符串名
函数调用 string + 字符串名
字符串比较大小 : 长度长的首先更大 ; 然后同样长度比较字符串对应数字的大小
字符串比较的过程中 空格键会被自动去掉
字符串长度 : string.size () ->>> 利用string关键字定义出来的字符串只能用这种方法
->>> 只有利用 数组方式定义出来的字符串是可以用strlen表示长度
字符串的结尾都是\0 因此我们对字符串依次执行操作的时候, 可以用!s[i] =’\0’ 来判断
字符串某个位置的内容: string[ i ]
不引入length就能遍历字符串的方法 for (auto &c : string){ } 这代表对于string中的每一个字符c,执行操作
然后在接下来for的内容内部还可以对c执行别的操作,例如判读c是不是某个类型的(c的类型依据字符的类型)
以前这么作都要用array [i]的方式来解决 ,现在直接就可以了
利用string代替数组
string本身具有很多方便的性质,但是string有string的一套规则,字符数组有数组的规则,最重要的是要做到只用一套规则,而不是混用。
使用string 数组名[ 数组长度 ] 会吸收一个字符串当作数组元素 来代替char型数组 优点是可以使用字符串
String: 既然使用了字符串,就不要将数组型字符串与string的方法混用:
string型相等: a == b 数组字符串相等 : strcmp
string型赋值: a = b 数组型字符串赋值 : strcpy
string型续写: a += b 数组型续写 :strcat
warn: 以上操作均基于a b是同一类的情况下进行,不要将来自不同类型的方法混用 否则可能会面对convert问题
由string 与数组之间相互转换,有时候给定的是字符型数组,但是这种类型并不方便:
void aquire(char a[],string b[])
{
int d=0; char是给定的数组,string b[]是我们拿来接收的
for (int c=0;a[c]!=’\0’ ;c++) 这次的特点是,目标字符有长有短,不一定都是一个长度的
{
if(a[c]!=’,’) 间隔符使用的是:‘,’ 因此只要是逗号就什么都不作,
{ 不是逗号:至少录入一个字节
b[d] = a[c];
if (a[c + 1] != ‘,’) 这里可以使用while修改来达到录入更多的目的
{
b[d] += a[c + 1]; 巨大问题:这里得单独跳出来一个int d=0;使用
c++; 如果没有只有c的话,b[]会多出很多空字符
}
d++; 这里的d++代表录入一个以后再录入第二个
}
}