-
Notifications
You must be signed in to change notification settings - Fork 0
/
string
190 lines (154 loc) · 4.59 KB
/
string
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
string是C++中常用的一个类
*********************************************************************************************
使用string 就要包含string类,即#include<string>
方法:
const char *c_str();
c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同。
1-定义string类的变量的方法:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1;
string s2="c plus plus"s
string s3 = s2;
string s4(5,'s');
return 0;
}
变量s1只是定义,没有初始化,编译器会将默认值赋值给s1,默认值是"",也即空字符串。
变量s2在定义的同时被定义为"C plus plus"。与c风格的字符串不同,string的结尾没有结束标志'\0';
变量s3在定义的时候直接用s2进行初始化,因此s3的内容也是"c plus plus"。
变量s4被初始化由5个'S'字符组成的字符串,也就是"ssssss"
string变量可以通过赋值操作符=进行赋值。string 变量也可以通过C风格的字符串进行赋值,例如,s2是用一个字符串常量进行初始化的,而s3则是s2变量进行初始化的。
2-函数length()
与C风格的字符串不同,当我们需要知道字符串长度时,可以调用string类提供的length()函数。
string s="http://c.biancheng.net";
int len = s.length;
cout<<len<<endl;
输出结果为22.由于string的末尾没有'\0'字符,所以length()返回的字符串的长度是真是长度,而不是长度+1.
转换为c风格的字符串
虽然C++提供了string类来替换C语言中的字符串,但是实际变成过程中,有时候必须使用C风格的字符串(例如打开文件的路径)
为此,string类为我们提供了一个转换函数c_str(),能够将string字符串转换为C风格的字符串,并返回该字符串的const指针(const char*).
string path = "D:\\demo.txt";
FILE *fp=fopen(path.c_str(),"rt");
为了使用c语言中fopen()函数打开文件,必须将string字符转换为C风格的字符串。
string 字符串的输入输出
string类重载了输入输出运算符,可以像对待普通对象那个对待string变量,也就是>>进行输入,用<<进行输出,
例如:
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
string s;
cin>>s;
cout<<s<<endl;
return 0;
}
输入
123455 9084849
输出
123455
采用空格进行分开其实是遇到空格就会结束输入
string s="1234567890";
for(int i=0;i<s.length();i++){
cout<<s[i]<<" ";
}
cout<<endl;
s[5]='5';
cout<<s<<endl;
return 0;
从程序中可以看出是s[5]='5';就将第6个字符修改为'5',所以s最后为"1234557890"
字符串的拼接:
在string类中,可以使用+或者+=运算符来直接拼接字符串,非常方便,不用再需要C语言
中的strcat()、strcpy()、malloc()等函数来拼接字符串了,也不用担心空间不会会溢出。
3-函数atoi():
int x;
string str;
x = std::atoi(str.c_str());
将sting类型转换为int类型
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
string s1 = "first";
string s2 = "second";
char *s3 = "third";
char s4[]="fourth";
char ch='@';
string s5 = s1+s2;
string s6 = s1+s3;
string s7 = s1+ s4;
string s8=s1+ch;
cout<<s5<<endl<<s6<<endl<<s7<<endl<<s8<<endl;
return 0;
}
输出:
firstsecond
firstthird
firstfourth
first@
string的增删改查
提取字符:
#include <iostream>
#include <string>
using namespace std;
int main(){
string s1 = "first second third";
string s2;
s2 = s1.substr(6, 6);
cout<< s1 <<endl;
cout<< s2 <<endl;
return 0;
}
输出
first second third
second
String转换成数组:两个函数data,c_str
data返回字符数组,不带\0,c_str带\0。
首先验证getline是每次读取一行,直到读取完成
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
void ReadData()
{
fstream fin("data.txt");
string s;
while(getline(fin,s))
{
cout<<"Read from file:"<<s<<endl;
}
}
int main()
{
ReadData();
return 0;
}
可以测试出,输出的文件即为data.txt的内容。
继续验证例子
string a
std::ifstream assistFie(a.data)
std::string line = "";
if(assisFile.is_open())
{
int begin,end;
bedin=end=-1;
int order =0;
double x =0.0;
double y =0.0;
double z =0.0;
double angle =0.0;
while(getline(assistFile,line))
{
for(int i=0;i<line.size();i++)
{
if(i==begin&&''!=lin.at(i))
{
begin = i;
}
}
}
}