鱼C论坛

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

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

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

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

输入输出如图: 屏幕截图 2020-09-12 233002.jpg
#include <iostream>
#include <string.h>

using std::string;
using std::cout;
using std::cin;
using std::endl;


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

        int min,i=0,j;
        for(i = 0;i<4;i++)
        {
                min = i;
                for(j = i+1;j<=4;j++)
                {
                        if(*t[min]>*t[j])
                                min = j;
                }
                p = t[i];
                t[i] = t[min];
                t[min] = p;
        }
        
        
        for(i=0;i<5;i++)//输出字符串
       cout<<t[i]<<endl;

}

int main()
{
        char *t[5];//用于记录五个字符串的位置 
        
        cout<<"请输入五个字符串:"<<endl;
        string s0,s1,s2,s3,s4;
        t[0] = &s0[0];
        t[1] = &s1[0];
        t[2] = &s2[0];
        t[3] = &s3[0];
        t[4] = &s4[0];
        cin>>s0>>s1>>s2>>s3>>s4;//输入字符串 
        
        cout<<endl;
        Order_2(t);
        return 0;
        
} 
最佳答案
2020-9-12 23:34:30
void Order_2(char *t[5])//五个字符串排序 
{
        char *p;
        
        int min,i=0,j;
        for(i = 0;i<4;i++)
        {
                min = i;
                for(j = i+1;j<=4;j++)
                {
                        if(*t[min]>*t[j])
                                min = j;
                }
                p = t[i];
                t[i] = t[min];
                t[min] = p;
        }
        
        
        for(i=0;i<5;i++)//输出字符串
                cout<<t[i]<<endl;
        
}

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

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

        Order_2(t);
        return 0;
        
}
 

最佳答案

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-12 23:34:30 | 显示全部楼层    本楼为最佳答案   
void Order_2(char *t[5])//五个字符串排序 
{
        char *p;
        
        int min,i=0,j;
        for(i = 0;i<4;i++)
        {
                min = i;
                for(j = i+1;j<=4;j++)
                {
                        if(*t[min]>*t[j])
                                min = j;
                }
                p = t[i];
                t[i] = t[min];
                t[min] = p;
        }
        
        
        for(i=0;i<5;i++)//输出字符串
                cout<<t[i]<<endl;
        
}

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

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

        Order_2(t);
        return 0;
        
}
 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-13 10:45:12 | 显示全部楼层
我选择用string类来替换char *
比如:
#include <iostream>
#include <string>
int main() {
    std::string t[5] = { "abc", "def","ghijk","lmn","opq" };
    std::cout << t[0] << std::endl;
    std::cout << t[0][1] << std::endl;
    //string类允许使用下标来访问字符串中字符
    //t[0]表示t这个string类的数组的第一个
    //t[0][1]表示string类的数组的第一个的第二个字符
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-15 10:01:54 | 显示全部楼层
谢谢大佬!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 03:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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