标签:temp 多少 st3 依次 说明 编写程序 类型 标点符号 语句
void readByLine ()
{
string line;
?
while (getline (cin, line)) {
cout << line << endl;
}
}
void readByWord ()
{
string word;
?
while (cin >> word) {
cout << word << endl;
}
}
输入运算符会自动忽略字符串前的空白(空格、制表符、换行等),从第一个真正的字符到下一个空白。
getline函数会保存字符串中的空白,读入数据直到遇见换行符。
void compareString ()
{
string s1, s2;
?
cin >> s1 >> s2;
?
if (s1 == s2) {
cout << "equal" << endl;
} else if (s1 > s2){
cout << s1 << endl;
} else {
cout << s2 << endl;
}
?
}
void compareSize ()
{
string s1, s2;
?
cin >> s1 >> s2;
if (s1.size() == s2.size()) {
cout << "equal" << endl;
} else if (s1.size() > s2.size()) {
cout << s1 << endl;
} else {
cout << s2 << endl;
}
}
void linkString ()
{
string word;
string sum;
?
while (getline (cin, word)) {
?
sum += word;
cout << sum << endl;
}
}
void spliteString ()
{
string word;
string sum;
?
while (getline(cin, word)) {
sum += (word + " ");
cout << sum << endl;
}
}
void test306 ()
{
string str("hello world!");
int len = str.size();
?
// for (int i = 0; i < len; i++) {
// str[i] = ‘x‘;
// }
for (auto &c : str) {
c = ‘X‘;
}
?
cout << str << endl;
}
Answer: 设置成char也是可以的,因为每个元素都是char类型的。
Answer: 用普通for循环实现如3.6题代码中注释部分,while实现也差不多,都要先知道字符串的长度。相比较而言,范围for语句更加简洁一点。
string s;
cout << s[0] << endl;
Answer: 不合法,使用超出范围的下标将引发不可预知的结果,由此推断,使用下标访问空string也会引发不可预知的结果。
void test310 ()
{
const string str = "0123&*sjaa,.?70!";
string result;
?
for (auto c : str) {
// if ((c>=‘0‘ && c<=‘9‘) || (c>=‘a‘ && c<=‘z‘) || (c>=‘A‘ && c<=‘Z‘)) {
if (!ispunct(c)) { //ispunct函数,如果c为标点符号时为真。
result += c;
}
}
?
cout << result << endl;
}
const string s = "Keep out!";
for (auto &c : s) { /*. . . */ }
不合法,设置一个auto类型的引用时,初始值中的顶层const依旧保留,c的类型为const string&。 因此,如果, 在for循环中要改变c的值,则语句不合法。
vector<vector> ivec; //合法,创建类型为vector的对象。
vector svec = ivec; //不合法,svec是string类型,而ivec是vector类型。
vectorsvec(10, "null"); //合法,创建10个string类型的元素,每个都被初始化为null
(a)vector<int> v1; //不包含元素
(b)vector<int> v2(10); //包含10个元素,每个都初始化为0
(c)vector<int> v3(10, 42); // 包含10个元素,每个都初始化为42
(d)vector<int> v4{10}; // 包含1个元素,值为10
(e)vector<int> v5{10, 42}; // 包含2个元素,值分别是10和42
(f)vector<string> v6{10}; // 10个默认初始化的元素,初始化为空
(g)vector<string> v7{10, "hi"}; // 10个值为hi的元素
void test314 ()
{
vector<int> ivec;
int num;
while (cin >> num) {
ivec.push_back(num);
}
vector<int>::iterator iter;
for (iter = ivec.begin(); iter != ivec.end(); iter ++) {
cout << *iter << " ";
}
cout << endl;
}
ctrl + D 结束输入
void test315 ()
{
vector<string> svec;
string str;
while (cin >> str) {
svec.push_back(str);
}
?
vector<string>::iterator iter;
?
for (iter = svec.begin(); iter != svec.end(); iter ++) {
cout << *iter << " ";
}
cout << endl;
}
void test316 ()
{
vector<int> v1; //不包含元素
vector<int> v2(10); //包含10个元素,每个都初始化为0
vector<int> v3(10, 42); // 包含10个元素,每个都初始化为42
vector<int> v4{10}; // 包含1个元素,值为10
vector<int> v5{10, 42}; // 包含2个元素,值分别是10和42
vector<string> v6{10}; // 10个默认初始化的元素,初始化为空
vector<string> v7{10, "hi"}; // 10个值为hi的元素
?
vector<int>::iterator iter;
for (iter = v3.begin(); iter != v3.end(); iter++) {
cout << *iter << " ";
}
}
3.17 从cin读入一组词并把它们存入一个vector对象,然后设法把所有词都改为大写。输出改变后的结果,每个词占一行。
void test317 ()
{
string word;
vector<string> svec;
?
while (cin >> word) {
svec.push_back(word);
}
?
for (auto &str : svec) {
for (auto &c : str) {
c = toupper(c);
}
}
?
for (auto i : svec) {
cout << i << endl;
}
}
vector<int> ivec;
ivec[0] = 42;
不合法,ivec为空,不包含任何元素,不能通过下标去访问元素。应改为 ivec.push_back(42);
vector<int> ivec1(10, 42);
vector<int> ivec2 (ivec1);
vector<int> ivec3 {42, 42, 42, 42, 42, 42, 42, 42, 42, 42};
第一种更好,简洁。还可以使用for循环挨个赋值,但都繁琐。
void test318 ()
{
int num;
vector<int> ivec;
vector<int> sum;
?
while (cin >> num) {
ivec.push_back(num);
}
?
?
for (vector<int>::size_type i = 0; i < ivec.size(); i+=2) {
sum.push_back(ivec[i]+ivec[i+1]);
}
?
for (auto &s : sum) {
cout << s << " ";
}
cout << endl;
}
void test319 ()
{
int num;
vector<int> ivec;
vector<int> sum;
?
while (cin >> num) {
ivec.push_back(num);
}
?
vector<int>::size_type len = ivec.size();
int temp;
// 如果有奇数个数字,则最中间的数会与自己相加一遍,未排除这种情况
for (vector<int>::size_type i = 0; i < (len+1)/2; i++) {
temp = ivec[i]+ivec[len-i-1];
cout << "i = " << i << " temp = " << temp << endl;
sum.push_back(temp);
}
?
for (auto &s : sum) {
cout << s << " ";
}
cout << endl;
}
已经使用过迭代器了,不再赘述。
void test323()
{
vector<int> integer(10, 2);
?
for (auto& iter : integer) {
iter *= 2;
}
?
for (auto it : integer) {
cout << it << " ";
}
cout << endl;
}
上面的答案就是用迭代器做的。
void test325() { vector<unsigned> scores(10, 0); unsigned grade; int i = 0; int n = 0; auto iter = scores.begin(); while (i < 5) { cin >> grade; if (grade > 100) { cout << "Wrong grade!" << endl; continue; } n = grade/10; // scores[n] ++; iter = iter + n; (*iter) ++; i++; iter = scores.begin(); } ? cout << "scores are : " ; for (auto iter : scores) { cout << iter << " "; } cout << endl; } ?
标签:temp 多少 st3 依次 说明 编写程序 类型 标点符号 语句
原文地址:https://www.cnblogs.com/songshuguiyu/p/9081507.html