在主函数中输入10个不等长的字符串放入二维宇符数组中,编写函数sort()
利用指针数组对其排序,在主函数中输出排好序的字符串
#include<iostream>
#include<cstring>
using namespace std;
void sort(char *str[])
{
//简单选择排序
for (int i = 0; i < 9; i++)
{
int k = i;
for (int j = i+1; j < 10; j++)
{
if (strcmp(str[k], str[j]) > 0)
{
k = j;
}
}
if (k != i)
{//交换的是地址
char *p = str[k];
str[k] = str[i];
str[i] = p;
}
}
}
int main()
{
char str[10][20];
for(int i=0;i<10;i++){
gets(str[i]);
}
char *p[10];
for (int i = 0; i < 10; i++)
{
p[i] = str[i];//将str的第i行的首地址付给指针数组的第i个变量
}
sort(p);
cout<<"排序后的结果:"<<endl;
for (int i = 0; i < 10; i++)
{
cout<<p[i]<<endl;//此时p[i]为第i个元素的内容
}
return 0;
}
#include <stdio.h>
#include <string.h>
void stob(char s[]); //定义排序函数
int main()
{
char str[10];
gets(str); //输入10个字符
stob(str); //调用排序函数
puts(str); //输出排序后的字符
return 0;
}
//排序函数
void stob(char s[])
{
int i, j;
char temp;
for (i=0; i<10; i++)
for (j=i+1; j<10; j++)
if (s[i]>s[j]){
temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}
如果有用请采纳,谢谢
#include <bits/stdc++.h>
using namespace std;
void sort(char a[][40]){
int i,j,k;
char temp[30];
for(i=0;i<10;i++){
for(j=i;j<10;j++){
if(strcmp(a[j],a[i])>0){
strcpy(temp, a[j]);
strcpy(a[j], a[i]);
strcpy(a[i], temp);
}
}
}
}
int main() {
char c[10][40];
int i;
for(i=0;i<10;i++){
cin>>c[i];
}
sort(c);
for(i=0;i<10;i++){
cout<<c[i]<<endl;
}
return 0;
}
结果及代码如下:
#include <iostream>
#include <string>
using namespace std;
#define MAXNMB 10 //10个字符串
#define MAXLEN 40 //每个字符串的最大长度
void sort(char *a[])
{
int i, j;
char tmp[MAXLEN];
for (i = 0; i < MAXNMB - 1; i++)
{
for (j = 0; j < MAXNMB - 1 - i; j++)
{
if (strcmp(a[j], a[j + 1]) > 0) //按照升序排列,如需降序排列,把>改成<即可
{
strcpy(tmp, a[j]);
strcpy(a[j], a[j + 1]);
strcpy(a[j + 1], tmp);
}
}
}
}
int main()
{
char *a[MAXNMB];
int i;
cout << "请输入"<< MAXNMB <<"个字符串:" << endl;
for (i = 0; i < MAXNMB; i++)
{
a[i] = new char[MAXLEN];
cin >> a[i];
}
//排序
sort(a);
//输出
cout << "排序后的字符串:" << endl;
for (i = 0; i < MAXNMB; i++)
cout << a[i] << endl;
return 0;
}
使用指针数组方式,代码如下:
#include<stdio.h>
#include<string.h>
void sort(char s[][100])
{
int i,j;
char* p[10] = {s[0],s[1],s[2],s[3] ,s[4],s[5] ,s[6],s[7] ,s[8],s[9]}; //定义一个指针数组
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if (strcmp(p[j],p[j+1])>0)
{
char s[100];
strcpy(s, p[j]);
strcpy(p[j], p[j+1]);
strcpy(p[j+1], s);
}
}
int main()
{
int i;
char s[10][100];
for (i = 0; i < 10; i++)
gets(s[i]);
sort(s);
printf("排序后:\n");
for (i = 0; i < 10; i++)
puts(s[i]);
return 0;
}
输入输出: