C++经典程序(2)
要读取报文内容,你可以使用C语言的socket编程库来读取报文。下面是一个简单的示例代码,演示了如何使用C语言读取HTTP报文内容:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#define BUFFER_SIZE 4096
int main() {
// 创建socket
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("socket");
exit(EXIT_FAILURE);
}
// 设置服务器地址
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(80);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
// 连接服务器
if (connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
perror("connect");
exit(EXIT_FAILURE);
}
// 构造HTTP请求
char request[1000];
sprintf(request, "GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n");
// 发送HTTP请求
if (send(sockfd, request, strlen(request), 0) < 0) {
perror("send");
exit(EXIT_FAILURE);
}
// 读取服务器响应
char buffer[BUFFER_SIZE];
memset(buffer, 0, sizeof(buffer));
ssize_t num_bytes;
while ((num_bytes = recv(sockfd, buffer, sizeof(buffer) - 1, 0)) > 0) {
buffer[num_bytes] = '\0';
printf("%s", buffer);
memset(buffer, 0, sizeof(buffer));
}
// 关闭socket
close(sockfd);
return 0;
}
这个示例代码使用了socket库来创建一个TCP socket,并连接到指定的服务器。然后,它构造了一个HTTP GET请求,并发送给服务器。接下来,它使用循环读取服务器的响应,并将响应内容打印到控制台上。最后,关闭socket连接。
请注意,这个代码示例仅仅是一个基本的示例,实际情况可能会更加复杂。在实际开发中,你可能需要处理更多的错误情况、处理报文的分块传输、解析报文头部等等。
下面是一个简单的二分查找算法的C代码示例:
#include <stdio.h>
int binarySearch(int arr[], int left, int right, int target) {
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid;
}
else if (arr[mid] < target) {
left = mid + 1;
}
else {
right = mid - 1;
}
}
return -1; // 找不到目标元素
}
int main() {
int arr[] = {1, 3, 5, 7, 9, 11, 13, 15};
int n = sizeof(arr) / sizeof(arr[0]);
int target = 7;
int result = binarySearch(arr, 0, n - 1, target);
if (result == -1) {
printf("目标元素不存在\n");
}
else {
printf("目标元素的索引为 %d\n", result);
}
return 0;
}
在这个示例代码中,我们定义了一个名为binarySearch
的函数,它接收一个排序好的整数数组arr
,数组的左边界left
,右边界right
和目标元素target
作为参数。
binarySearch
函数通过比较目标元素与数组中间元素的大小来确定目标元素在左半部分还是右半部分。如果目标元素等于中间元素,则返回中间元素的索引。如果目标元素小于中间元素,则在数组的左半部分继续查找。如果目标元素大于中间元素,则在数组的右半部分继续查找。通过不断缩小查找范围,最终可以找到目标元素或确定目标元素不存在。
在主函数中,我们定义了一个有序整数数组,并设置目标元素为7。然后我们调用binarySearch
函数来查找目标元素在数组中的索引,并根据返回结果进行相应的输出。
请注意,这个示例代码假设输入的数组已经排序好。在真实应用中,你可能需要对输入的数组进行排序操作,或者使用其他方法来保证数组的有序性。
下面是一个简单的for循环的C代码示例:
#include <stdio.h>
int main() {
int i;
for (i = 0; i < 10; i++) {
printf("%d ", i);
}
return 0;
}
在这个示例代码中,我们使用for循环打印0到9的整数。循环的初始条件为i = 0
,循环条件为i < 10
,每次循环结束后,i
增加1。在循环体内部,使用printf
函数打印当前的i
值。运行这段代码,输出结果为0 1 2 3 4 5 6 7 8 9
。
你可以根据自己的需求修改循环的初始条件、循环条件和循环体内的代码来实现不同的功能。
下面是一个二分搜索的C代码示例:
#include <stdio.h>
int binarySearch(int arr[], int low, int high, int target) {
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == target) {
return mid;
}
else if (arr[mid] < target) {
low = mid + 1;
}
else {
high = mid - 1;
}
}
return -1; // 如果未找到目标元素,则返回-1
}
int main() {
int arr[] = {1, 3, 5, 7, 9, 11, 13, 15};
int target = 9;
int n = sizeof(arr) / sizeof(arr[0]);
int result = binarySearch(arr, 0, n - 1, target);
if (result == -1) {
printf("目标元素 %d 未找到\n", target);
}
else {
printf("目标元素 %d 在数组中的位置是 %d\n", target, result);
}
return 0;
}
在这个示例代码中,我们定义了一个函数binarySearch
来实现二分搜索。函数接受一个有序数组arr
以及数组的范围low
和high
,以及要搜索的目标元素target
。在循环中,我们通过计算中间元素的索引mid
来确定搜索范围的中间位置。如果中间元素等于目标元素,则直接返回中间元素的索引。如果中间元素小于目标元素,则更新low
为mid + 1
,继续在右半部分搜索。如果中间元素大于目标元素,则更新high
为mid - 1
,继续在左半部分搜索。如果未找到目标元素,则返回-1。
在main
函数中,我们定义了一个有序数组arr
和要搜索的目标元素target
。我们通过调用binarySearch
函数来执行二分搜索,并将结果保存在result
变量中。最后,根据搜索结果打印相应的信息。
运行这段代码,将输出目标元素 9 在数组中的位置是 4
,因为数字9在数组中的索引位置为4。
以下是一个经典的C++代码示例,用于计算斐波那契数列的前n个数:
#include <iostream>
using namespace std;
int fibonacci(int n) {
if (n <= 1) {
return n;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
int main() {
int n;
cout << "请输入要计算斐波那契数列的前n个数:" << endl;
cin >> n;
cout << "斐波那契数列的前" << n << "个数为:" << endl;
for (int i = 0; i < n; i++) {
cout << fibonacci(i) << " ";
}
return 0;
}
这段代码首先定义了一个递归函数fibonacci()
,用于计算斐波那契数列的第n个数。然后在main()
函数中,通过用户输入获取要计算的斐波那契数列的前n个数。接下来使用循环,调用fibonacci()
函数并输出结果,最后返回0表示程序执行成功。
这个示例展示了C++中函数声明和定义的基本用法,以及循环和条件语句的使用。同时也展示了如何使用输入输出流进行用户交互和结果输出。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!