C++如何从TXT文件读取以|分隔的书籍信息并映射到结构体?
嘿,我来帮你解决这个读取书籍信息的问题!你之前只读到整行内容,应该是没对每行的字符串做分割处理,直接把整行赋值给了标题字段对吧?别担心,咱们一步步来搞定它。
先确认结构体定义
以C#为例(其他语言逻辑完全相通),先确保你的Book结构体字段和需求匹配:
public struct Book { public string Title; public string Author; public decimal Price; }
完整实现代码(带注释)
下面是核心的读取、解析和输出逻辑,每一步都做了细节处理:
using System; using System.IO; class Program { static void Main() { string filePath = "你的书籍文件路径.txt"; // 记得替换成实际文件路径 // 逐行读取文件,这种方式更节省内存 foreach (string line in File.ReadLines(filePath)) { // 跳过空行,避免无效处理 if (string.IsNullOrWhiteSpace(line)) continue; // 用'|'作为分隔符拆分每行内容 string[] bookParts = line.Split('|'); // 检查拆分后的元素数量是否符合要求(必须是标题、作者、价格三个部分) if (bookParts.Length != 3) { Console.WriteLine($"⚠️ 无效行:{line},格式应为「Title|Author|Price」"); continue; } // 处理价格字段,转换为数值类型(用decimal更适合货币场景) if (!decimal.TryParse(bookParts[2].Trim(), out decimal bookPrice)) { Console.WriteLine($"⚠️ 行「{line}」中的价格格式错误,请检查"); continue; } // 把拆分后的内容赋值给Book结构体实例 Book currentBook = new Book { Title = bookParts[0].Trim(), // Trim去掉字段前后可能的空格,让数据更干净 Author = bookParts[1].Trim(), Price = bookPrice }; // 输出到控制台,格式可按需调整 Console.WriteLine("📚 书籍详情:"); Console.WriteLine($"标题:{currentBook.Title}"); Console.WriteLine($"作者:{currentBook.Author}"); Console.WriteLine($"价格:{currentBook.Price:C}\n"); // :C是货币格式输出 } } }
关键逻辑说明
- 字符串分割:这是你之前缺失的核心步骤——用
Split('|')把整行拆分成三个独立字段,就能分别对应结构体的属性了,再也不会输出整行内容 - 数据校验:加入了空行跳过、拆分元素数量检查、价格格式校验,避免因为文件格式错误导致程序崩溃
- 细节处理:用
Trim()清理字段前后的空格,价格用decimal类型保证精度,这些小细节能让程序更健壮
如果用的是其他语言(比如C++、Python),核心逻辑也是一致的:逐行读取→按分隔符拆分→校验数据→赋值结构体/类→输出。比如Python可以用line.split('|')拆分,用dataclass定义书籍结构。
内容的提问来源于stack exchange,提问作者A.Petrov
相关产品推荐
相关产品推荐

