文章目录
- 连接两个字符串字面常量
- 题目
- 注意
- 代码
- 输出结果
- 处理输入的变长字符串
- 题目
- 注意
- 代码
连接两个字符串字面常量
题目
连接两个字符串字面常量,将结果保存在一个动态分配的char数组中。重写,连接两个标准库string对象。
注意
使用头文件cstring的strcpy拷贝字符串、strcat连接字符串。注意释放动态数组。
代码
#include <iostream>
#include <string>
#include <cstring>
using namespace std;int main(int argc, char const *argv[]) {const char *c1 = "hello ";const char *c2 = "world";char *r1 = new char[strlen(c1) + strlen(c2) + 1];strcpy(r1, c1);strcat(r1, c2);cout << r1 << endl;delete [] r1;char *r2 = new char[strlen(c1) + strlen(c2) + 1];string s1 = "hello ";string s2 = "world";strcpy(r2, (s1+s2).c_str());cout << r2 << endl;delete [] r2;return 0;
}
输出结果
处理输入的变长字符串
题目
从标准输入读取一个字符串,存入一个动态分配的字符数组中。描述你的程序如何处理变长输入。测试你的程序,输入一个超出你分配的数组长度的字符串。
注意
动态数组的大小是程序员设定的。因此有可能出现输入的字符串长度大于动态数组的长度,此时需要截断读取操作(也选择可以抛出异常等操作)。为了能读取空白符,采用get来读取字符。(可以在程序中选择遇到空白符截断读取)
代码
#include <iostream>
#include <string>
#include <cstring>
using namespace std;int main(int argc, char const *argv[]) {char *r = new char[20]; // 最多存放19个字符+一个结束符int l = 0;char c;while (cin.get(c)) {if(isspace(c)) // 空格符、制表符等空白符break;r[l++] = c;if(l == 20){cout << "达到数组容量上限" << endl;break;}}r[l] = 0;cout << r << endl;delete [] r;return 0;
}