c++排序数组.我的分类在第一次传球时有效,但在那之后就不行了
c++ sorting arrays.. My sort works on the first pass but not after that
我的第一篇帖子,所以如果我把事情弄得一团糟,请原谅我,并告诉我哪里出了问题,谢谢。
我正在尝试按字母顺序对数组进行排序。它们是一组字符,每个字符组成一个单词。它成功地对第一遍进行了排序,但在第二遍和第三遍之后就不会这样做了。我看不出代码没有改变。记住,第一次传球非常好。感谢
#include <iostream>
#include <conio.h>
#include <string>
#include <fstream>
using namespace std;
const int limit = 10;
const int noWords = 4;
typedef char nametype[limit];
#define in_file "data.txt"
#define out_file "result.txt"
void main()
{
int total_count = 0;
int nonarranged = 0;
int rearrange_count = 0;
char temp[20];
char tempchar;
nametype list[noWords];
nametype tempWord;
ifstream ins;
ofstream outs;
ins.open(in_file);
outs.open(out_file);
每个单词最多可包含9个字符,如果少于9个,则多余的字符为空格。我首先运行for循环,将数据文件中的每个字符添加到tempWord中,在9个字符后,我添加空字符"\0",然后将字符串添加到数组列表中。
while (!ins.eof()) //run until end of file
{
for (int i = 0; i < limit - 1; i++)
{
ins.get(tempchar);
tempWord[i] = tempchar;
}
tempWord[limit - 1] = ' ';
strcpy_s(list[0], tempWord);
for (int i = 0; i < limit - 1; i++)
{
ins.get(tempchar);
tempWord[i] = tempchar;
}
tempWord[limit - 1] = ' ';
strcpy_s(list[1], tempWord);
for (int i = 0; i < limit - 1; i++)
{
ins.get(tempchar);
tempWord[i] = tempchar;
}
tempWord[limit - 1] = ' ';
strcpy_s(list[2], tempWord);
for (int i = 0; i < limit - 1; i++)
{
ins.get(tempchar);
if (tempchar != 'n')
tempWord[i] = tempchar;
}
tempWord[limit - 1] = ' ';
strcpy_s(list[3], tempWord);
一旦行中的四个单词都在列表中。作为list[0]list[1]list[2]list[3],我开始使用以下代码进行排序。第一次传球有效,但之后不行。
//rearrange words into alphabetical order
//pass 1
if (strcmp(list[0], list[1]) > 0)
{
strcpy_s(temp, list[1]);
strcpy_s(list[1], list[0]);
strcpy_s(list[0], temp);
rearrange_count += 1;
}
if (strcmp(list[1], list[2]) > 0)
{
strcpy_s(temp, list[1]);
strcpy_s(list[1], list[2]);
strcpy_s(list[2], temp);
rearrange_count += 1;
}
if (strcmp(list[2], list[3]) > 0)
{
strcpy_s(temp, list[2]);
strcpy_s(list[2], list[3]);
strcpy_s(list[3], temp);
rearrange_count += 1;
}
//pass 2
if (strcmp(list[0], list[1]) > 0)
{
strcpy_s(temp, list[1]);
strcpy_s(list[1], list[0]);
strcpy_s(list[0], temp);
rearrange_count += 1;
}
if (strcmp(list[1], list[2]) > 0)
{
strcpy_s(temp, list[1]);
strcpy_s(list[1], list[2]);
strcpy_s(list[2], temp);
rearrange_count += 1;
}
//pass 3
if (strcmp(list[0], list[1]) > 0)
{
strcpy_s(temp, list[1]);
strcpy_s(list[1], list[0]);
strcpy_s(list[0], temp);
rearrange_count += 1;
}
//to calculate how many sentances did not need to be arranged
if (rearrange_count = 0)
nonarranged += 1;
else
{
total_count += rearrange_count;
rearrange_count = 0;
}
for (int i = 0; i < noWords; i++)
cout << list[i];
cout << endl;
}
cout << "number of sorts " << total_count << endl;
cout << "amount not arranged " << nonarranged;
ins.close();
outs.close();
_getch();
}
strcpy_s()使用3个参数(至少在Visual Studio中使用)。中间的参数是目标缓冲区的大小。我不知道你为什么没有出错。可以使用strcpy()代替strcpy_s(),也可以添加size参数。
如果需要掉期对账单,则只有5个:
if (strcmp(list[0], list[2]) > 0)
{
strcpy_s(temp, limit, list[2]);
strcpy_s(list[2], limit, list[0]);
strcpy_s(list[0], limit, temp);
rearrange_count += 1;
}
if (strcmp(list[1], list[3]) > 0)
{
strcpy_s(temp, limit, list[1]);
strcpy_s(list[1], limit, list[3]);
strcpy_s(list[3], limit, temp);
rearrange_count += 1;
}
if (strcmp(list[0], list[1]) > 0)
{
strcpy_s(temp, limit, list[1]);
strcpy_s(list[1], limit, list[0]);
strcpy_s(list[0], limit, temp);
rearrange_count += 1;
}
if (strcmp(list[2], list[3]) > 0)
{
strcpy_s(temp, limit, list[2]);
strcpy_s(list[2], limit, list[3]);
strcpy_s(list[3], limit, temp);
rearrange_count += 1;
}
if (strcmp(list[1], list[2]) > 0)
{
strcpy_s(temp, limit, list[1]);
strcpy_s(list[1], limit, list[2]);
strcpy_s(list[2], limit, temp);
rearrange_count += 1;
}
相关文章:
- 是否实例化了所有有效的模板
- 用 1M 个条目有效地屏蔽了 30% 的阵列
- 这被认为是有效的C 11还是C 14?还是GCC/Clang弄错了
- “A a = A()”有效吗?下面调用了哪些运算符/方法
- 如何判断 std::vector 是否调整了自身大小,以及如何解释指向向量内值的指针不再有效
- 有效地处理 C/C++ 中的函数调用了一百万次
- Eclipse报告了有效cpp继承的错误
- std::使用了move,调用了move构造函数,但对象仍然有效
- 数组有效,而矢量无效。我做错了什么?
- 当我使用由unsigned int和unsigned long区分的重载函数时,引发了不明确的函数调用错误?这种重载有效
- 如何检查用户是否输入了有效值
- 检查 Gdiplus::Bitmap::FromFile 是否返回了有效的位图
- 仅当启用了嗅探器 - 加密响应内容时,curl 才有效
- 代码有效 数学不行
- cin.get() 有效,但不能使用 cin.getline().我对cin.getline()做错了什么或误解了什么
- 在C++中将字符串转换为带完整有效数字的浮点值[修复了在开发人员C++中工作的问题]
- c++排序数组.我的分类在第一次传球时有效,但在那之后就不行了
- 在有效地计算数组中第二个元素较少的对时,我哪里错了
- C++正在检查用户是否输入了有效答案
- 代码在Visual Studio中可以很好地编译,但在使用g++的Unix终端中就不行了.我在多维向量处得到一个错误.为