鱼C论坛

 找回密码
 立即注册
查看: 2000|回复: 3

[已解决]C++输入问题!

[复制链接]
发表于 2020-9-12 23:34:29 | 显示全部楼层 |阅读模式
10鱼币
小白求助:用于排序的order_2函数总是少传入一个字符串,请各位大神帮忙看看是哪里有问题(鞠躬)

题目要求:实现一个C++程序,能够对用户输入的若干个字符串,将每个字符串的首字母按照英文字典排序,由小到大顺序输出。

输入输出如图: 屏幕截图 2020-09-12 233002.jpg

  1. #include <iostream>
  2. #include <string.h>

  3. using std::string;
  4. using std::cout;
  5. using std::cin;
  6. using std::endl;


  7. void Order_2(char *t[5])//五个字符串排序
  8. {
  9.         char *p;

  10.         int min,i=0,j;
  11.         for(i = 0;i<4;i++)
  12.         {
  13.                 min = i;
  14.                 for(j = i+1;j<=4;j++)
  15.                 {
  16.                         if(*t[min]>*t[j])
  17.                                 min = j;
  18.                 }
  19.                 p = t[i];
  20.                 t[i] = t[min];
  21.                 t[min] = p;
  22.         }
  23.        
  24.        
  25.         for(i=0;i<5;i++)//输出字符串
  26.        cout<<t[i]<<endl;

  27. }

  28. int main()
  29. {
  30.         char *t[5];//用于记录五个字符串的位置
  31.        
  32.         cout<<"请输入五个字符串:"<<endl;
  33.         string s0,s1,s2,s3,s4;
  34.         t[0] = &s0[0];
  35.         t[1] = &s1[0];
  36.         t[2] = &s2[0];
  37.         t[3] = &s3[0];
  38.         t[4] = &s4[0];
  39.         cin>>s0>>s1>>s2>>s3>>s4;//输入字符串
  40.        
  41.         cout<<endl;
  42.         Order_2(t);
  43.         return 0;
  44.        
  45. }
复制代码
最佳答案
2020-9-12 23:34:30

  1. void Order_2(char *t[5])//五个字符串排序
  2. {
  3.         char *p;
  4.        
  5.         int min,i=0,j;
  6.         for(i = 0;i<4;i++)
  7.         {
  8.                 min = i;
  9.                 for(j = i+1;j<=4;j++)
  10.                 {
  11.                         if(*t[min]>*t[j])
  12.                                 min = j;
  13.                 }
  14.                 p = t[i];
  15.                 t[i] = t[min];
  16.                 t[min] = p;
  17.         }
  18.        
  19.        
  20.         for(i=0;i<5;i++)//输出字符串
  21.                 cout<<t[i]<<endl;
  22.        
  23. }

  24. int main()
  25. {
  26.         char *t[5];//用于记录五个字符串的位置
  27.        
  28.         cout<<"请输入五个字符串:"<<endl;
  29.         string s0,s1,s2,s3,s4;

  30.         cin>>s0>>s1>>s2>>s3>>s4;//输入字符串
  31.        
  32.         cout<<endl;
  33. //把对 string 的取址放在输入字符串之后就可以了
  34. //因为输入之前,string 对象并没有为字符串分配内存空间,取址操作取来的不知道是什么东西
  35. //输入之后,string 对象已经为字符串分配了内存,就可以正确取址了。
  36. //不过,不建议这么操作啊,要么都用char [],要么都用string对象
  37.         t[0] = &s0[0];
  38.         t[1] = &s1[0];
  39.         t[2] = &s2[0];
  40.         t[3] = &s3[0];
  41.         t[4] = &s4[0];

  42.         Order_2(t);
  43.         return 0;
  44.        
  45. }
复制代码

最佳答案

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-9-12 23:34:30 | 显示全部楼层    本楼为最佳答案   

  1. void Order_2(char *t[5])//五个字符串排序
  2. {
  3.         char *p;
  4.        
  5.         int min,i=0,j;
  6.         for(i = 0;i<4;i++)
  7.         {
  8.                 min = i;
  9.                 for(j = i+1;j<=4;j++)
  10.                 {
  11.                         if(*t[min]>*t[j])
  12.                                 min = j;
  13.                 }
  14.                 p = t[i];
  15.                 t[i] = t[min];
  16.                 t[min] = p;
  17.         }
  18.        
  19.        
  20.         for(i=0;i<5;i++)//输出字符串
  21.                 cout<<t[i]<<endl;
  22.        
  23. }

  24. int main()
  25. {
  26.         char *t[5];//用于记录五个字符串的位置
  27.        
  28.         cout<<"请输入五个字符串:"<<endl;
  29.         string s0,s1,s2,s3,s4;

  30.         cin>>s0>>s1>>s2>>s3>>s4;//输入字符串
  31.        
  32.         cout<<endl;
  33. //把对 string 的取址放在输入字符串之后就可以了
  34. //因为输入之前,string 对象并没有为字符串分配内存空间,取址操作取来的不知道是什么东西
  35. //输入之后,string 对象已经为字符串分配了内存,就可以正确取址了。
  36. //不过,不建议这么操作啊,要么都用char [],要么都用string对象
  37.         t[0] = &s0[0];
  38.         t[1] = &s1[0];
  39.         t[2] = &s2[0];
  40.         t[3] = &s3[0];
  41.         t[4] = &s4[0];

  42.         Order_2(t);
  43.         return 0;
  44.        
  45. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-9-13 10:45:12 | 显示全部楼层
我选择用string类来替换char *
比如:

  1. #include <iostream>
  2. #include <string>
  3. int main() {
  4.     std::string t[5] = { "abc", "def","ghijk","lmn","opq" };
  5.     std::cout << t[0] << std::endl;
  6.     std::cout << t[0][1] << std::endl;
  7.     //string类允许使用下标来访问字符串中字符
  8.     //t[0]表示t这个string类的数组的第一个
  9.     //t[0][1]表示string类的数组的第一个的第二个字符
  10.     return 0;
  11. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-15 10:01:54 | 显示全部楼层
谢谢大佬!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-2 07:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表