如何将名称读入指针数组并输出?
How to read names into a pointer array and output them?
这是我目前得到的:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int characterList = 0;
char* dynamo = new char[1000];
char* buffer = dynamo;
ifstream input("wordlist.txt");
if (input.is_open())
{
input >> dynamo[characterList];
while (input.eof())
{
characterList++;
input >> dynamo[characterList];
cout << dynamo[characterList];
}
}
else
{
cout << "File not opened" << endl;
}
return;
}
我是初学者,如果这看起来很糟糕,我深表歉意。我创建了一个文本文件,其中引用了 Bill Cosby 的一句话,我试图一次读一个词。引用是 "I don't know the key to success, but the key to failure is trying to please everybody." 我正在尝试从忽略标点符号的文本文档中一次读取一个单词。我知道有很多类似的问题,但他们使用的代码我没有学过,所以我很抱歉有一个重复的问题。我没学过getline
(我用的是cin.getline
)和#include <string>
.
编辑:我忘了说,所以我很抱歉没有早点这样做,但我正在研究动态内存分配,这就是我使用新的 char[1000] 的原因。
我会这样做:
#include <iostream>
#include <string>
#include <fstream>
int main() {
std::string array[6];
std::ifstream infile("Team.txt");
std::string line;
int i = 0;
while (std::getline(infile, line)) {
array[i++] = line;
}
return 0;
}
基于 this 答案。
在这里,我们假设我们必须从文件 "Team.txt" 中读取 6 行。我们使用 std:::getline() 并放入一个 while
以便我们读取所有文件。
在每次迭代中,line
保存读取文件的当前行。在正文中,我们将其存储在 array[i]
.
我建议您使用 std::string
而不是使用 new[]
在堆上手动分配缓冲区并尝试从文件中手动读取文本进入这些缓冲区(并且不要忘记通过适当的 delete[]
调用释放缓冲区!)。
C++ 输入流 类 像 std::ifstream
可以简单地将文本读入 std::string
个实例,这要归功于 [=18= 的适当重载].
语法很简单:
string word;
while (inFile >> word)
{
cout << word << endl;
}
这里有一个完整的可编译示例代码供您试验和学习:
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main()
{
ifstream inFile("test.txt");
if (inFile.is_open())
{
string word;
while (inFile >> word)
{
cout << word << endl;
}
}
else
{
cout << "Can't open file." << endl;
}
}
这是我在包含您问题中指定内容的测试文本文件上得到的输出:
I
don't
know
the
key
to
success,
but
the
key
to
failure
is
trying
to
please
everybody.
注意
当然,一旦您将单词读入 std::string
实例,您可以使用其 push_back()
方法将它们存储在类似 std::vector<std::string>
的容器中。
这是我目前得到的:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int characterList = 0;
char* dynamo = new char[1000];
char* buffer = dynamo;
ifstream input("wordlist.txt");
if (input.is_open())
{
input >> dynamo[characterList];
while (input.eof())
{
characterList++;
input >> dynamo[characterList];
cout << dynamo[characterList];
}
}
else
{
cout << "File not opened" << endl;
}
return;
}
我是初学者,如果这看起来很糟糕,我深表歉意。我创建了一个文本文件,其中引用了 Bill Cosby 的一句话,我试图一次读一个词。引用是 "I don't know the key to success, but the key to failure is trying to please everybody." 我正在尝试从忽略标点符号的文本文档中一次读取一个单词。我知道有很多类似的问题,但他们使用的代码我没有学过,所以我很抱歉有一个重复的问题。我没学过getline
(我用的是cin.getline
)和#include <string>
.
编辑:我忘了说,所以我很抱歉没有早点这样做,但我正在研究动态内存分配,这就是我使用新的 char[1000] 的原因。
我会这样做:
#include <iostream>
#include <string>
#include <fstream>
int main() {
std::string array[6];
std::ifstream infile("Team.txt");
std::string line;
int i = 0;
while (std::getline(infile, line)) {
array[i++] = line;
}
return 0;
}
基于 this 答案。
在这里,我们假设我们必须从文件 "Team.txt" 中读取 6 行。我们使用 std:::getline() 并放入一个 while
以便我们读取所有文件。
在每次迭代中,line
保存读取文件的当前行。在正文中,我们将其存储在 array[i]
.
我建议您使用 std::string
而不是使用 new[]
在堆上手动分配缓冲区并尝试从文件中手动读取文本进入这些缓冲区(并且不要忘记通过适当的 delete[]
调用释放缓冲区!)。
C++ 输入流 类 像 std::ifstream
可以简单地将文本读入 std::string
个实例,这要归功于 [=18= 的适当重载].
语法很简单:
string word;
while (inFile >> word)
{
cout << word << endl;
}
这里有一个完整的可编译示例代码供您试验和学习:
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main()
{
ifstream inFile("test.txt");
if (inFile.is_open())
{
string word;
while (inFile >> word)
{
cout << word << endl;
}
}
else
{
cout << "Can't open file." << endl;
}
}
这是我在包含您问题中指定内容的测试文本文件上得到的输出:
I don't know the key to success, but the key to failure is trying to please everybody.
注意
当然,一旦您将单词读入 std::string
实例,您可以使用其 push_back()
方法将它们存储在类似 std::vector<std::string>
的容器中。