c++字符串gets与puts
时间: 2023-08-08 16:01:19 浏览: 101
C语言中,gets与puts是两个常用的字符串输入输出函数。
gets函数用于从标准输入设备(通常是键盘)获取字符串输入,并将输入的字符串存储到指定的字符数组中。该函数的原型如下:
```c
char *gets(char *str);
```
其中,str为指向字符数组的指针。使用gets函数时需要注意以下几点:
1. 该函数读取的字符会包括换行符(\n),所以输入时需要额外输入一个回车键以结束输入。
2. 由于没有对输入字符串的长度进行检查,当输入的字符数超过数组的长度时,可能会导致缓冲区溢出等问题,因此使用gets函数时应当尽量限制输入字符的长度。
puts函数用于将字符串输出到标准输出设备(通常是屏幕)。该函数的原型如下:
```c
int puts(const char *str);
```
其中,str为要输出的字符串。puts函数会在字符串后面自动添加一个换行符,并返回一个非负整数表示成功输出的字符数。使用puts函数时需要注意以下几点:
1. 该函数只能输出字符串,不能输出其他数据类型的值。
2. 输出的字符串会自动换行,不需要在字符串末尾手动添加换行符。
3. 如果输出失败,则返回EOF(-1)。
综上所述,gets函数用于从标准输入获取字符串输入,puts函数用于将字符串输出到标准输出,并自动添加换行符。在使用这两个函数时,应当注意输入字符的长度限制和输出字符串的格式。
相关问题
字符串实验报告
实验名称:字符串操作实验
实验目的:通过实现字符串的常见操作,掌握字符串的基本概念和操作方式。
实验环境:C++语言,Visual Studio 2019
实验步骤:
1. 字符串定义和初始化
在C++中,字符串可以用字符数组或string类型来表示。字符数组定义方式如下:
```
char str[20]; //定义一个长度为20的字符数组
```
string类型定义方式如下:
```
string s; //定义一个空字符串
```
字符串初始化可以直接在定义时赋值,也可以通过赋值语句进行赋值。例如:
```
char str1[] = "hello world"; //定义并初始化字符数组
string s1 = "hello world"; //定义并初始化string类型
char str2[20];
strcpy(str2, "hello world"); //使用strcpy函数进行字符串复制
```
2. 字符串输入输出
可以使用cin和cout语句进行字符串的输入和输出。对于字符数组,需要使用gets和puts函数进行输入输出。例如:
```
char str[20];
cout << "请输入字符串:";
gets(str); //使用gets函数进行字符串输入
cout << "你输入的字符串是:" << str << endl; //使用puts函数进行字符串输出
```
对于string类型的字符串,可以直接使用cin和cout语句进行输入输出。例如:
```
string s;
cout << "请输入字符串:";
cin >> s; //使用cin语句进行字符串输入
cout << "你输入的字符串是:" << s << endl; //使用cout语句进行字符串输出
```
3. 字符串长度
可以使用strlen函数获取字符数组的长度,也可以使用string类型的size函数获取字符串的长度。例如:
```
char str[] = "hello world";
int len1 = strlen(str); //获取字符数组的长度
string s = "hello world";
int len2 = s.size(); //获取字符串的长度
```
4. 字符串连接
可以使用strcat函数将两个字符数组连接起来,也可以使用+运算符将两个string类型的字符串连接起来。例如:
```
char str1[] = "hello";
char str2[] = "world";
char str3[20] = "";
strcat(str3, str1); //将str1复制到str3中
strcat(str3, str2); //将str2连接到str3中
cout << str3 << endl; //输出str3
string s1 = "hello";
string s2 = "world";
string s3 = s1 + s2; //将s1和s2连接到一起
cout << s3 << endl; //输出s3
```
5. 字符串比较
可以使用strcmp函数比较两个字符数组是否相等,也可以使用==运算符比较两个string类型的字符串是否相等。例如:
```
char str1[] = "hello";
char str2[] = "world";
if (strcmp(str1, str2) == 0) {
cout << "str1和str2相等" << endl;
} else {
cout << "str1和str2不相等" << endl;
}
string s1 = "hello";
string s2 = "world";
if (s1 == s2) {
cout << "s1和s2相等" << endl;
} else {
cout << "s1和s2不相等" << endl;
}
```
实验结果:
根据以上步骤,我们可以实现字符串的常见操作,包括定义和初始化、输入输出、长度获取、连接和比较等。通过实验,我掌握了字符串的基本概念和操作方式,提升了自己的编程能力。
题目描述 已知两个字符a和b中的字符已经按照升序排序,将两个字符串a和b合并到字符串c中,使得c串中的字符仍然有序 方法1: a和b并入c,再对c排序 方法2: 把a和b中的字符逐个有序的放入c中 方法3: 把a数组放入c中,再将b中的字符逐个插入c合理的位置上。 注意:字符串函数gets,puts 输入 第一行输入字符串a 第二行输入字符串b 输出 字符串c 样例输入 aceg bdfgh 样例输出 abcdefggh
方法2和方法3都可以实现合并后保持有序的功能,但方法2需要额外的排序操作,效率较低,因此推荐使用方法3。
以下是C++的示例代码实现:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char a[101], b[101], c[201]; // 定义字符数组
cin.getline(a, 101); // 输入字符串a
cin.getline(b, 101); // 输入字符串b
int len_a = strlen(a), len_b = strlen(b);
int i = 0, j = 0, k = 0;
while (i < len_a && j < len_b) { // 遍历字符串a和b
if (a[i] < b[j]) { // 将a中的字符放入c中
c[k++] = a[i++];
} else { // 将b中的字符放入c中
c[k++] = b[j++];
}
}
while (i < len_a) { // 将a中剩余的字符放入c中
c[k++] = a[i++];
}
while (j < len_b) { // 将b中剩余的字符放入c中
c[k++] = b[j++];
}
puts(c); // 输出字符串c
return 0;
}
```
输入样例:
```
aceg
bdfgh
```
输出样例:
```
abcdefggh
```