如何从输入文件中获取字符 '\n'?
How can I get the character '\n' from input file?
我正在尝试从 Linux / Mint 上的 txt 文件获取输入数据。因此,在编译代码后,我 运行 以下命令:./a.out output.txt
我需要填充一个二维数组但像一个锯齿状数组(每行中的列数不同)。所以我想通过查看从文件中读取的字符来拆分它。如果字符是'\n',我要填充第二行。但我想我无法读取'\n'字符。我希望我能解释这个问题。
我正在写代码,也许它会更清晰。
我的 input.txt 文件是:
我的 C++ 代码部分用于获取输入:
for (int i = 0; i<n; i++) {
char ch;
cin >> ch;
int j = 0;
while (ch != '\n') {
arr[i][j] = ch;
cin >> ch;
j++;
}
}
我想这样做,如果字符等于 '\n',程序会继续将数组填充到下一行。
arr[0][0] = 'a';
arr[0][1] = 'f'
arr[0][2] = 'h'
arr[1][0] = 'b'
arr[1][1] = 'e'
arr[1][2] = 'g'
arr[2][0] = 'c' .......)
当您执行 cin >> ch
时,它将跳过空格,包括空格、制表符和换行符。也许,您需要使用 std::getline 读取整行,然后分别处理每一行。
例如:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
char ch;
std::string line;
int ln = 0;
while (getline(cin, line)) // read entire line
{
istringstream is;
is.str(line);
while (is >> ch) // now read individual chars from that line
cout << "line: " << ln << " char: " << ch << endl;
ln++;
}
}
你的循环应该是这样的:
std::string line;
for (int i=0; i<n; ++i)
{
char ch;
if (!std::getline(cin, line))
break;
std::istringstream is;
is.str(line);
for (int j=0; is >> ch; ++j)
arr[i][j] = ch;
}
您省略了有关如何声明 arr
的详细信息,但您显示的代码似乎无法正确处理它。也许,使用向量会更好:
std::vector<std::vector<char> > arr;
std::string line;
char ch;
while (std::getline(cin, line)) // cin should probably be replaced with ifstream
{
std::istringstream is;
is.str(line);
arr.push_back(vector<char>());
for (int j=0; is >> ch; ++j)
arr.back().push_back(ch);
}
我正在尝试从 Linux / Mint 上的 txt 文件获取输入数据。因此,在编译代码后,我 运行 以下命令:./a.out output.txt 我需要填充一个二维数组但像一个锯齿状数组(每行中的列数不同)。所以我想通过查看从文件中读取的字符来拆分它。如果字符是'\n',我要填充第二行。但我想我无法读取'\n'字符。我希望我能解释这个问题。 我正在写代码,也许它会更清晰。
我的 input.txt 文件是:
我的 C++ 代码部分用于获取输入:
for (int i = 0; i<n; i++) {
char ch;
cin >> ch;
int j = 0;
while (ch != '\n') {
arr[i][j] = ch;
cin >> ch;
j++;
}
}
我想这样做,如果字符等于 '\n',程序会继续将数组填充到下一行。
arr[0][0] = 'a';
arr[0][1] = 'f'
arr[0][2] = 'h'
arr[1][0] = 'b'
arr[1][1] = 'e'
arr[1][2] = 'g'
arr[2][0] = 'c' .......)
当您执行 cin >> ch
时,它将跳过空格,包括空格、制表符和换行符。也许,您需要使用 std::getline 读取整行,然后分别处理每一行。
例如:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
char ch;
std::string line;
int ln = 0;
while (getline(cin, line)) // read entire line
{
istringstream is;
is.str(line);
while (is >> ch) // now read individual chars from that line
cout << "line: " << ln << " char: " << ch << endl;
ln++;
}
}
你的循环应该是这样的:
std::string line;
for (int i=0; i<n; ++i)
{
char ch;
if (!std::getline(cin, line))
break;
std::istringstream is;
is.str(line);
for (int j=0; is >> ch; ++j)
arr[i][j] = ch;
}
您省略了有关如何声明 arr
的详细信息,但您显示的代码似乎无法正确处理它。也许,使用向量会更好:
std::vector<std::vector<char> > arr;
std::string line;
char ch;
while (std::getline(cin, line)) // cin should probably be replaced with ifstream
{
std::istringstream is;
is.str(line);
arr.push_back(vector<char>());
for (int j=0; is >> ch; ++j)
arr.back().push_back(ch);
}