#include<iostream> #include<fstream> #include<string> #include<sstream> using namespace std; int main() { ifstream myfile("C:\\Users\\30379\\source\\repos\\sg.txt"); if (!myfile.is_open()) { cout << "can not open this file" << endl; return 0; } string s; int row = 0,i; string name1[50], name2[50], relationship[50], country1[50], country2[50]; string a[500]; while (getline(myfile, s)) { //cout << s << endl; row++; stringstream ss(s); i = 1; while (i <= 5) { if (i == 1) getline(ss,name1[row], ','); else if (i == 2) getline(ss, name2[row], ','); else if (i == 3) getline(ss, relationship[row], ','); else if (i == 4) getline(ss, country1[row], ','); else if (i == 5) getline(ss, country2[row], ','); i++; } } cout << name1[3]; myfile.close(); return 0; }
时间: 2024-03-29 18:36:31 浏览: 10
这是一个 C++ 的程序,主要功能是读取一个名为 "sg.txt" 的文件,文件路径为 "C:\Users\30379\source\repos\sg.txt",并从文件中读取每行内容,将每行内容中的第 1 列、第 2 列、第 3 列、第 4 列和第 5 列分别存储到 name1、name2、relationship、country1 和 country2 数组中,最后输出 name1 数组中第 3 个元素的值。程序中使用了 ifstream、string、sstream 等 C++ 的标准库,其中 ifstream 主要用于读取文件,string 和 stringstream 主要用于字符串的处理和分割。
相关问题
修改以下代码将视屏发送给服务端并将视频保存到本地#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <sstream> #include<string> #include <fstream> #include <vector> #include<winsock.h> #pragma
注:为了确保代码的正确性和安全性,以下是修改后的代码:
```cpp
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <sstream>
#include <string>
#include <fstream>
#include <vector>
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")
void SaveVideo(const std::string& filePath, const std::vector<char>& videoData) {
std::ofstream file(filePath, std::ios::out | std::ios::binary);
if (file.is_open()) {
file.write(videoData.data(), videoData.size());
file.close();
std::cout << "Video saved successfully." << std::endl;
}
else {
std::cerr << "Failed to save video." << std::endl;
}
}
int main() {
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
std::cerr << "Failed to initialize winsock." << std::endl;
return 1;
}
SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, 0);
if (clientSocket == INVALID_SOCKET) {
std::cerr << "Failed to create socket." << std::endl;
WSACleanup();
return 1;
}
sockaddr_in serverAddress{};
serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(12345); // 修改为服务端的端口号
serverAddress.sin_addr.s_addr = inet_addr("127.0.0.1"); // 修改为服务端的IP地址
if (connect(clientSocket, reinterpret_cast<sockaddr*>(&serverAddress), sizeof(serverAddress)) != 0) {
std::cerr << "Failed to connect to the server." << std::endl;
closesocket(clientSocket);
WSACleanup();
return 1;
}
std::string filePath = "video.mp4"; // 修改为要保存的视频文件路径
std::ifstream file(filePath, std::ios::in | std::ios::binary);
if (file.is_open()) {
std::vector<char> videoData((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
file.close();
// 发送视频数据到服务端
if (send(clientSocket, videoData.data(), videoData.size(), 0) == SOCKET_ERROR) {
std::cerr << "Failed to send video data." << std::endl;
}
else {
std::cout << "Video data sent successfully." << std::endl;
}
// 保存视频到本地
SaveVideo("received_video.mp4", videoData);
}
else {
std::cerr << "Failed to open video file." << std::endl;
}
closesocket(clientSocket);
WSACleanup();
return 0;
}
```
请确保以下几点:
1. 修改 `serverAddress.sin_port` 为服务端的端口号。
2. 修改 `serverAddress.sin_addr.s_addr` 为服务端的IP地址。
3. 修改 `filePath` 为要保存的视频文件路径。
4. 确保链接了 `ws2_32.lib` 库。
注意:这是一个简单的示例代码,仅展示了如何将视频数据发送到服务端并将其保存到本地。实际情况可能需要进行更多的错误处理和安全性考虑。
#include <iostream> #include <fstream> #include <string> #include <map> #include <SimpleIni.h> #include <sstream> using namespace std; int main() { map<string, string> config; CSimpleIniA ini; ini.LoadFile("config.ini"); string filename = ini.GetValue("Section1", "filename", ""); config["filename"] = filename; string txt = ini.GetValue("Section1", "txt", ""); stringstream txt_stream(txt); string line; while (getline(txt_stream, line)) { config["txt"] += line + "\n"; } ofstream file(config["filename"]); if (file.is_open()) { file << config["txt"]; file.close(); cout << "文件已成功生成!" << endl; } else { cout << "无法创建文件。" << endl; } return 0; } 这段代码有问题,文件只读取到最后一行内容
这是因为在读取 `txt` 配置时,使用了 `stringstream` 对其进行了处理。而在 `stringstream` 对象被销毁前,只有最后一行内容被保存在 `config["txt"]` 中。解决这个问题的方法是使用另外一种方式读取文件内容。可以尝试使用 `ifstream` 对象来读取文件,然后将每一行的内容添加到 `config["txt"]` 中。修改后的代码如下:
```c++
#include <iostream>
#include <fstream>
#include <string>
#include <map>
#include <SimpleIni.h>
using namespace std;
int main() {
map<string, string> config;
CSimpleIniA ini;
ini.LoadFile("config.ini");
string filename = ini.GetValue("Section1", "filename", "");
config["filename"] = filename;
string txt_file = ini.GetValue("Section1", "txt", "");
ifstream txt(txt_file);
if (txt.is_open()) {
string line;
while (getline(txt, line)) {
config["txt"] += line + "\n";
}
txt.close();
}
else {
cout << "无法打开文件 " << txt_file << endl;
return 1;
}
ofstream file(config["filename"]);
if (file.is_open()) {
file << config["txt"];
file.close();
cout << "文件已成功生成!" << endl;
}
else {
cout << "无法创建文件。" << endl;
}
return 0;
}
```
这样修改后可以正确读取文件的所有行,并将其保存在 `config["txt"]` 中。