对数组/文件 I/O C++进行排序
Sorting Arrays/File I/O C++
我想知道是否有人可以帮助我对这个数组进行排序,我对如何在这个项目中准确实现它有点迷茫。因为它是硬件,不要透露整个答案,而是推动我朝着正确的方向前进。项目如下:编写一个程序,该程序将读取一行文本,并输出文本中出现的所有字母的列表以及每个字母在该行中出现的次数。用一个用作哨兵值的句点结束该行。字母应按以下顺序使用:从高到低。假设输入使用了所有小写字母。几个问题。1. 我对数组进行排序是否正确?2.在将排序数组放入我的代码之前,当代码编译时,会出现一个空白屏幕。有什么方法可以解决这个问题吗?
如果写得不好,很抱歉,提前感谢您的帮助!
inlcude <iostream>
#inlcude <fstream>
using namespace std;
void initialize(int list[]);
void Sort(int list[],int& num);
void characterCount(char ch, int list[]);
void readText(ifstream& intext, char& ch, int list[]);
void totalCount(int list[]);
int main()
{
int index,letterCount[26];
char ch;
ifstream inFile;
infile.open("C:/temp/Data_Chapter_7_8.txt");
if (!inFile)
{
cout << " Cannot open file." <<endl;
}
initialize(letterCount);
infile.get(ch);
while (inFile)
{
int index;
readText(inFile,ch,letterCount)
index++;
inFile.get(ch);
}
totalCount(index, letterCount);
inFile.close();
system("PAUSE");
return 0;
}
//initializes array letterCount to 0
void initialize(int list[])
{
for(int x = 0;x<26;x++)
list[x] = 0
}
//increments the letter count. Makes sure counting letters.
void characterCount (char ch, int list[])
{
int index;
ch = tolower(ch);
if(static_cast<int>(ch)>=97&&(static_cast<int>(ch)<=122))
letterCount[static_cast<int>(ch)-97]++;
}
void readText(ifstream& intext, char& ch, int list[])
{
while (ch != '.')
{
characterCount (ch,list);
intext.get(ch);
}
}
//displays data
void totalCount(int list[])
{
for(int x=0;x<26;x++)
if(letterCount[x]>0)
cout<<static_cast<char>(x+97)<<" "<<letterCount[x]<<endl;
}
void Sort(int list[],int& num)
{
int i,j,flag = 1;
int temp;
int numLength = num.length();
for (i=1;(i<=numLength)&&flag; i++)
{
flag = 0;
for (j=o; j<(numLength-1);j++0
{
if(num[j+1]>num[j])
{
temp = num[j];
num[j] = num[j+1];
num[j+1]=temp;
flag = 1;
}
}
}
return;
}
与其使用凌乱的气泡排序和其他有趣的东西,我们可以简单地跟踪每个字母的出现次数,因为只有 26 种可能性。这应该会产生更干净(和更快)的代码:
int numOccur[26];
...
for (int i = 0; i < numCh; i ++)
numOccur[letters[i] - 'a'] ++;
for (i = 25; i >= 0; i --)
if (i > 0)
cout<<static_cast<char>(i+97)<<" "<<numOccur[i]<<endl;
当然,您应该将 for 循环替换为适当的文件读取循环。
只是一些评论。
- 我看不出这里的大部分选角有任何充分的理由。
- 使用
isalpha
、isupper
或islower
检查字母,并使用tolower
或toupper
来识别字母(注意:使用这些函数是铸造的少数理由之一)。 - 可能最简单的
lettercount
方法是使用 'int lettercount[26] ={0}; - 除非绝对需要编写自己的排序例程,否则只需使用
std::sort
即可。 - 在定义 ifstream 时打开文件通常是最简单的:
std::ifstream infile("whatever");
- 不要使用
while (infile)
.这几乎是一个有保证的错误。执行读取,并检查它是否成功,例如:while (infile.get(ch)) ...
相关文章:
- 二叉排序树无法编译
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 对字符串进行排序时,在c++中处理sort()
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 下面是排序算法O(n)吗
- std::sort()函数无法对向量的一部分进行排序
- shell排序中的交换和比较
- clang格式:禁用排序包含
- 显示错误输出的简单数组排序程序
- 为什么我的排序算法会更改数组值
- 试图在c++中对数字列表进行排序
- 如何在C++中对数组进行冒泡排序