焚海拦江 发表于 2020-9-12 23:34:29

C++输入问题!

小白求助:用于排序的order_2函数总是少传入一个字符串,请各位大神帮忙看看是哪里有问题(鞠躬)

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

输入输出如图:

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

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


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

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

}

int main()
{
        char *t;//用于记录五个字符串的位置
       
        cout<<"请输入五个字符串:"<<endl;
        string s0,s1,s2,s3,s4;
        t = &s0;
        t = &s1;
        t = &s2;
        t = &s3;
        t = &s4;
        cin>>s0>>s1>>s2>>s3>>s4;//输入字符串
       
        cout<<endl;
        Order_2(t);
        return 0;
       
}

xieglt 发表于 2020-9-12 23:34:30


void Order_2(char *t)//五个字符串排序
{
        char *p;
       
        int min,i=0,j;
        for(i = 0;i<4;i++)
        {
                min = i;
                for(j = i+1;j<=4;j++)
                {
                        if(*t>*t)
                                min = j;
                }
                p = t;
                t = t;
                t = p;
        }
       
       
        for(i=0;i<5;i++)//输出字符串
                cout<<t<<endl;
       
}

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

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

        Order_2(t);
        return 0;
       
}

a2462823047 发表于 2020-9-13 10:45:12

我选择用string类来替换char *
比如:

#include <iostream>
#include <string>
int main() {
    std::string t = { "abc", "def","ghijk","lmn","opq" };
    std::cout << t << std::endl;
    std::cout << t << std::endl;
    //string类允许使用下标来访问字符串中字符
    //t表示t这个string类的数组的第一个
    //t表示string类的数组的第一个的第二个字符
    return 0;
}

焚海拦江 发表于 2020-9-15 10:01:54

谢谢大佬!
页: [1]
查看完整版本: C++输入问题!