*****首先是关于字符串吃空格的问题,不管你的字符串需不需要空格,getline可以解决一切,直接上示例,我在VS中测试的,需要特定的<sstream>头文件。
#include <cstdio>
#include <string>
#include <iostream>
#include <sstream>//Vs中使用getline必须需要的头文件
using namespace std;
int main()
{
string s;//**string定义的时候可以不考虑[],string会根据长度自动调整!
getline(cin,s);
int sz = s.size();//**获取字符串长度
int arr[] = { 1,2,4,5 };
int q = sizeof(arr)/sizeof(arr[0]); //**获取非字符串数组长度
cout << sz<<q;
string o="lll";
string k = s + o;//**c++中可以用字符串加字符串,加几个都可以
cout<<k;
for (int i = 0; s[i]; ++i)
{
cout << s[i] << '\n';
}
cout << sz;
return 0;
}
*****string头文件下find函数的用法,也包括substr的用法示例。
****string中find库函数的用法,接下来的示例是把字符串中所有的目标字符打印出来
//思想:每找到一个目标字母,下一次就只找目标字母+1及以后的字符串,所以用到substr定义子串
#include <string>
#include <iostream>
using namespace std;
int main()
{
int fin = 0;
string s="Hello,World";
string zis;//每次找完到后,下一个新的子串
zis = s;//起初子串等于母串
int sz = s.size();
int mark = 0;//用来表示找到的字母在母串中的下标
while (1)
{
fin = zis.find("o");//子串中目标字母的下标
mark+=zis.find("o");//母串中目标字母的下标
if (fin == -1)
break;
else
zis = zis.substr (fin + 1, sz - fin);//fin+1是提取母串起始位置,sz-fin是提取的长度
cout << mark<<"\t";
}
return 0;
}
*******replace涉及字符串的替换
#include <string.h>
#include <iostream>
using namespace std;
int main()
{
string s = { "Hello,World" };
s.replace(6,1, "wsa");//6是起始位置即为W,后面接替换长度,但是目测填什么都可以,然后是需要替换的字符串,可以随便打,打100个字符都可以,目前Vs中测试没问题。
cout << s;
return 0;
}
*****字符串的比较
#include <string.h>
#include <iostream>
using namespace std;
int main()
{
string s1 = { "Hello,World" };
string s2 = { "awddxsa" };
int result = s1.compare(s2);//核心语句
cout << result<<"\n";
if (result < 0)
cout << "s1与s2的第一个相异字母是s1<s2";
else if (result == 0)
cout << "s1与s2完全一致";
else
cout << "s1与s2第一个相异的字母是s1>s2";
}
****用auto遍历字符串(auto:后面的变量可以是任意的,可以是未定义的,都是从0开始是往后遍历的变量)
#include <string.h>
#include <iostream>
using namespace std;
int main()
{
string s = { "Hello"};
int sz = s.size();
cout << "字符串长度为:" << sz<<"\n";
for (int p = 0; p < sz; ++p)
{
cout << s[p]<<"\n";
}
for (auto i : s)//此处i复制了s[i],但不是s[i]
{
cout << i;//看似输出i,实际是s[i]
i = 'a'; //对i即s[i]改变但是无法改变是s[i]仅仅是赋值而已
}
cout << "\n";
cout << s << "\n";
for (auto &i : s)//&i就是s[i]
{
cout << i;
i = 'a';//此处会改变s[i]
}
cout << s << "\n";
return 0;
}