【发布时间】:2021-11-26 06:08:42
【问题描述】:
我有一个ipk.dat 文件,其中包含学生姓名和他们的 GPA,用分号分隔。我正在尝试显示 GPA 大于 3 的学生的姓名,但我在控制台中得到了类似这样奇怪字符的输出。
Hidayat Sari 3.60
Susila Buana 3.27
Krisna Sari 3.66
Taufik Fatimah 3.38
Bachtiar Darma 3.70
Yohanes Anwar 3.93
Harun Ratna 3.48
Mega Zulfikar 3.32
Zulfikar Abdul 3.50
Rahman Nirmala 3.37
Amir Cinta 3.30
Firdaus Latifah 3.16
Annisa Ali 3.65
Eka Yuliana 3.14
这是我的代码:
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
int main() {
ifstream inGPA;
string studentGPA;
string studentName;
inGPA.open("ipk.dat");
if (inGPA.is_open()) {
string line;
while (getline(inGPA, line)) {
stringstream ss(line);
getline(ss, studentName, ';');
getline(ss, studentGPA);
if ( stod(studentGPA) >= 3.0) {
cout << studentName << " \t" << studentGPA << endl;
}
}
}
return 0;
}
这是 ipk.dat 文件的内部。这个文件的编码是 UTF-8。
如何解决这个奇怪的字符问题?
【问题讨论】:
-
输入文件中的“空格”实际上是“空格”还是一些看起来像“空格”的特殊字符?我会尝试手动编辑 dat 文件,删除名称之间的“空格”并在那里显式添加一个空格,看看是否能解决问题
-
@DedeKurniawan 您能否复制/粘贴您问题中的文本文件,以便我们自己测试而不是发布文本文件的图片。
-
还可以在十六进制编辑器中查看输入文件,以确切了解“空格”字符是什么。
-
@PepijnKramer 啊,我明白了。非常感谢您的解决方案。它修复了。
-
空格是UTF-8编码的U+00A0,也称为不间断空格。