• 第4关:书籍排序


    题目:

    C&C++结构体 (educoder.net)

     

     

    思路: 

    1.字符串字典序排序---> 利用string.h里面的strcmp,由其返回值确定两字符串大小。(p=strcmp(a,b),若p>1,则a字典序大于b。)

    2.当不能定义字符串string时,只能用字符数组来容纳字符串。但字符数组不可以向string定义的字符串那样用cin一次性输入,需要for循环一个字符一个字符的cin,太复杂了,故这里我们用cin.getline(arr,len)一次性输入一行字符(这样就相当于输入一个字符串了)。

    3.特别注意:在每次cin.getline之前要用getchar()吸收掉前面cin结束后留下的回车符!

    代码: 

    1. #include
    2. #include
    3. using namespace std;
    4. typedef struct _book
    5. {
    6. float price;
    7. char name[50];
    8. }mybook;
    9. int main()
    10. {
    11. int n,i,j,min;
    12. mybook book[55];
    13. cin >> n;
    14. for (i = 0; i < n; i++) {
    15. getchar(); //!!!!吸收掉上面 cin>>n 时输入的回车符号
    16. cin.getline(book[i].name, 55);//name被定义为字符而非字符串,不可以只通过一个cin输入,故用getline
    17. cin>> book[i].price;
    18. }
    19. //选择排序
    20. for (i = 0; i < n-1; i++) {
    21. min = i;
    22. for (j = i + 1; j < n; j++) {
    23. if (book[j].price < book[min].price)min = j;
    24. //在价格相等的情况下比较书名字典序--->字符串比字典序用strcpy
    25. else if (book[min].price == book[j].price && strcmp(book[min].name, book[j].name)>0)min = j;
    26. }
    27. //交换(结构体可以理解多赋值,直接赋值不用重载"=")
    28. if (min != i) {
    29. mybook t;
    30. t = book[min];
    31. book[min] = book[i];
    32. book[i] = t;
    33. }
    34. }
    35. //输出
    36. for (i = 0; i < n; i++)cout << book[i].price << ", " << book[i].name << "\n";
    37. }

  • 相关阅读:
    docker常用命令
    4、文件基础操作和缩放工具与抓手工具的使用
    美团面试:说说Netty的零拷贝技术?
    运维困局下确保系统稳定的可行性
    混合灰狼和布谷鸟搜索优化算法(Matlab完整代码实现)
    js 正则表达式
    加载各种PostProcessor -》 生成BeanDefinition
    Virtualbox虚拟机中Ubuntu忘记密码
    Flutter 最佳实践 - 01
    前端面试问题(3)
  • 原文地址:https://blog.csdn.net/asdfghrfh/article/details/134082430