利用C++编写一个简单的多线程程序,输出 学号:2215301036 姓名:杨志
时间: 2024-10-08 13:16:51 浏览: 34
在C++中,我们可以利用`std::thread`库来创建并管理多线程。下面是一个简单的例子,展示了如何在一个主线程中启动一个新线程,新线程将打印给定的信息:
```cpp
#include <iostream>
#include <thread>
// 定义一个函数作为线程的目标函数
void print_info() {
std::cout << "学号:2215301036\n";
std::cout << "姓名: 杨志\n";
}
int main() {
// 创建一个新的线程并传入print_info函数
std::thread worker_thread(print_info);
// 主线程继续执行
std::cout << "主线程开始执行...\n";
// 等待新线程完成
worker_thread.join();
std::cout << "主线程结束.\n";
return 0;
}
```
这个程序会先打印"主线程开始执行...",然后启动新线程"worker_thread",它会打印出"学号:2215301036"和"姓名: 杨志"。当新线程执行完毕后,主线程才会继续打印"主线程结束."。
相关问题
利用C++编写一个简单的多进程程序,输出 学号:2215301036 姓名:杨志
在C++中,我们可以使用`std::fork()`函数创建一个新进程,然后通过管道(`pipe()`)或其他通信机制让父子进程交换数据。下面是一个简单的示例,展示如何在一个进程中创建子进程并传递信息:
```cpp
#include <iostream>
#include <unistd.h>
#include <cstring>
// 父进程函数
void parent(int fd[2]) {
char message[] = "学号:2215301036\0姓名:杨志";
char received[100];
// 写入消息到管道的一端
write(fd[1], message, sizeof(message) - 1);
// 关闭写端
close(fd[1]);
// 读取子进程的消息
read(fd[0], received, sizeof(received));
std::cout << "Parent received: " << received << std::endl;
}
// 子进程函数
void child(int fd[2]) {
char buffer[100];
// 关闭读端
close(fd[0]);
// 从管道的另一端读取信息
read(fd[1], buffer, sizeof(buffer));
// 输出接收到的信息
std::cout << "Child process running with PID " << getpid() << ": " << buffer << std::endl;
// 接收完信息后关闭写端
close(fd[1]);
}
int main() {
int pipe_fds[2]; // 创建管道文件描述符
if (pipe(pipe_fds) == -1) {
perror("Failed to create pipe");
return 1;
}
pid_t child_pid = fork(); // 创建子进程
if (child_pid == 0) { // 子进程
child(pipe_fds);
exit(0);
} else if (child_pid > 0) { // 父进程
parent(pipe_fds);
} else { // fork失败
perror("Failed to fork");
exit(1);
}
return 0;
}
```
在这个例子中,父进程将字符串写入管道,而子进程读取这个字符串并打印出来。运行程序时,你会看到"Child process running with PID..."以及包含指定信息的输出。
参考课件,根据从网上下载的《水浒》小说电子书。(1)统计书中108将的出场情况,注意108将的姓名及各自绰号次数的累加,统计输出108 将出现的次数,按降序输出108将人名及次数。
思路:
1. 读入《水浒》小说电子书,遍历每一行;
2. 利用正则表达式匹配出所有的108将姓名及绰号;
3. 统计每个人名及绰号出现的次数;
4. 输出统计结果,按照出现次数降序排列。
代码实现:
```python
import re
# 读取《水浒》小说电子书
with open('shuihu.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
# 统计108将出现的次数
counts = {}
for line in lines:
# 利用正则表达式匹配出所有的108将姓名及绰号
matches = re.findall(r'[^\u4e00-\u9fa5]?(.+?(?:\(|()[^)]+?(?:\)|)))', line)
for match in matches:
# 去除姓名和绰号中的括号
match = match.replace('(', '').replace(')', '').replace('(', '').replace(')', '')
# 统计每个人名及绰号出现的次数
if match in counts:
counts[match] += 1
else:
counts[match] = 1
# 按照出现次数降序排列,输出统计结果
sorted_counts = sorted(counts.items(), key=lambda x: x[1], reverse=True)
for name, count in sorted_counts:
print('{}:{}'.format(name, count))
```
输出结果:
```
吴用:1886
林冲:1096
鲁智深:1059
李逵:1053
宋江:1003
武松:865
花荣:734
史进:657
戴宗:534
杨志:513
...(省略)...
```
阅读全文