46
#include
#include
#include
#include
using namespace std;
int main()
{
int input;
while (cin >> input)
{
string str;
vector vs;
while (input--)
{
cin >> str;
vs.push_back(str);
}
sort(vs.begin(), vs.end());
vector::iterator vit;
for (vit = vs.begin(); vit != vs.end(); vit++)
{
cout << *vit << endl;
}
}
return 0;
发表于 2016-01-05 18:10:02
回复(34)
41
本题的考察很基础,但是有一些细节问题需要注意,在C语言中应注意C语言的所有字符串的本质是以空字符'\0'结束的字符数组,所以在C语言中对于字符串的比较不能使用>
<
==这些常规的关系运算符,而要使用C语言标准库函数中的strcmp函数对字符串进行比较,比较的原则就是字典顺序,在C++中,string类对>
<
==这些运算符进行了重载,可以直接用来比较字符串,比较的原则依然是字典顺序。剩下的就是考察排序方法,常用的冒泡排序、选择排序等等都可以实现,代码如下:
#include
#include
using namespace std;
int main()
{
int String_Number,i,j;
string Input_String[1000],Temp;
cin>>String_Number;
for(i=0;i
cin>>Input_String[i];
for(i=0;i
{
for(j=0;j
{
if(Input_String[j]>Input_String[j+1])
{
Temp=Input_String[j];
Input_String[j]=Input_String[j+1];
Input_String[j+1]=Temp;
}
}
}
for(i=0;i
cout<
return 0;
}
发表于 2016-03-14 20:50:03
回复(11)
33
import sys
for i in sorted(list(map(lambda c:c.strip(),sys.stdin.readlines()[1:])),key=lambda c:c):print(i)
编辑于 2018-12-03 07:25:42
回复(19)
32
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
String [] ss = new String[num];
for (int i = 0; i < num; i++) {
ss[i]=sc.next();
}
Arrays.sort(ss);
for (int i = 0; i < ss.length; i++) {
System.out.println(ss[i]);
}
}
}
发表于 2016-03-26 20:37:21
回复(17)
9
#include
#include
#include
typedef struct
{
char str[101];
} table_t;
int cmp( const void *a, const void *b )
{
for( int i = 0; i < 101; i ++ )
{
if( ((table_t *)a)->str[i] > ((table_t *)b)->str[i] )
return 1;
if( ((table_t *)a)->str[i] < ((table_t *)b)->str[i] )
return -1;
}
return 0;
}
int main( void )
{
int num = 0;
scanf( "%d", &num );
table_t* table = (table_t*)malloc( num * sizeof( table_t ) );
if( table == NULL )
exit( 1 );
for( int i = 0; i < num; i++ )
scanf( "%s", table[i].str );
/* 冒泡排序法 */
table_t my_index = {0};
for( int i = 0; i < num-1; i++ )
{
for( int j = 0; j < num-1-i; j++ )
{
if( strcmp( table[j].str, table[j+1].str ) > 0 )
{
strcpy( my_index.str, table[j].str );
strcpy( table[j].str, table[j+1].str );
strcpy( table[j+1].str, my_index.str );
}
}
}
// qsort( table, num, sizeof( table_t ), cmp ); //快速排序标准库函数
for( int i = 0; i < num; i++ )
printf( "%s\n", table[i].str );
free( table );
return 0;
}
发表于 2018-04-10 11:40:32
回复(0)
8
import java.util.Collections;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Vector;
public class StringSort {
//方法一
//public static void main(String[] args) {
//Scanner in=new Scanner(System.in);
//int n=in.nextInt();
//String[] arr = new String[n];
//for (int i = 0; i < n; i++) {
//arr[i]=in.next();
//}
//sortString(arr);
//for (int i = 0; i < arr.length; i++) {
//System.out.println(arr[i]);
//}
//}
//
//private static void sortString(String[] arr) {
//String temp=null;
//for (int i = 0; i < arr.length-1; i++) {
//for (int j = i+1; j < arr.length; j++) {
//if(arr[i].compareTo(arr[j])>0){
//temp=arr[i];
//arr[i]=arr[j];
//arr[j]=temp;
//}
//}
//}
//}
//方法二
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
Vector ve=new Vector();
for (int i = 0; i < n; i++) {
ve.add(in.next());
}
Collections.sort(ve);
Iterator it=ve.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
发表于 2016-02-18 11:33:48
回复(5)
10
num = int(raw_input())
s = []
for i in range(num):
s.append(raw_input())
s.sort()
for i in s:print i
发表于 2016-07-14 17:11:59
回复(3)
6
//使用 multiset
#include
#include
#include
using namespace std;
int main() {
int n;
while (cin >> n) {
multiset strset;
string tmp;
for (int i = 0; i < n; ++i) {
cin>>tmp;
strset.insert(tmp);
}
for (auto it = strset.begin(); it != strset.end(); ++it)
cout << *it << endl;
}
return 0;
}
编辑于 2017-05-29 11:54:34
回复(4)
3
//忘了c语言还有strcmp和strcpy这两个函数,结果想了好久QAQ
#include
#include
int main()
{
int n,i,j,k=0;
char a[1000][100]={'\0'},b[100]={'\0'};
scanf("%d",&n);
getchar();
for(i=0;i
gets(a[i]);
for(i=0;i
{
for(j=0;j
{
k=0;
while(a[j][k]||a[j+1][k])
{
if((a[j][k]>a[j+1][k]&&a[j][k]!=0)||a[j+1][k]==0)
{
memcpy(b,a[j],strlen(a[j])+1);
memset(a[j],'\0',strlen(a[j]));
memcpy(a[j],a[j+1],strlen(a[j+1])+1);
memset(a[j+1],'\0',strlen(a[j+1]));
memcpy(a[j+1],b,strlen(b)+1);
}
else if(a[j][k]==a[j+1][k])
k++;
else
break;
}
}
}
for(i=0;i
{
printf("%s\n",a[i]);
}
return 0;
}
发表于 2020-01-30 23:04:43
回复(0)
3
暴力Python的三行代码:
n, strings = int(input()),[]
for i in range(n):strings.append(input())
for str in sorted(strings): print(str)
发表于 2018-03-19 00:32:42
回复(3)
3
#include
using namespace std;
vector a;
string s;
int main(){
int n;
while(cin>>n){
a.clear();
while(n--){
cin>>s;
a.push_back(s);
}
sort(a.begin(), a.end());
for(int i = 0; i < a.size(); ++i) cout << a[i] << endl;
}
return 0;
}
发表于 2016-05-11 13:32:30
回复(0)
2
C语言实现,注意换行符
#include
(737)#include
int main()
{
int n;
char str[1000][100];
char *ptstr[1000];
scanf("%d",&n);
int c;
getchar();
for(int i=0;i
gets(&str[i][100]);
ptstr[i] = &str[i][100];
}
for(int j=0;j
for(int k=j+1;k
if(strcmp(ptstr[j],ptstr[k])>0){
char *temp;
temp = ptstr[k];
ptstr[k] = ptstr[j];
ptstr[j] = temp;
}
}
}
for(int ii=0;ii
puts(ptstr[ii]);
}
return 0;
}
发表于 2020-05-08 14:58:07
回复(1)
2
#include
#include
#include
#include
using namespace std;
int main()
{
int num;
string str;
cin>>num;
vector vec;
for(int i=0;i
{
cin>>str;
vec.push_back(str);
}
sort(vec.begin(),vec.end());
for(int i=0;i
{
cout<
}
return 0;
}
发表于 2019-09-14 21:47:46
回复(0)
2
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n = in.nextInt();
String[] s = new String[n];
for(int i = 0; i < n; i++){
s[i] = in.next();
}
Arrays.sort(s);
for(int i = 0; i < s.length; i++) {
System.out.println(s[i]);
}
}
}
发表于 2017-03-14 16:15:04
回复(3)
2
var rl = require('readline').createInterface(process.stdin, process.stdout);
var n = 0;
var arr = [];
var index;
var value;
var i;
rl.on('line', function(line) {
if (n === 0) {
n = parseInt(line.trim(), 10);
arr = new Array();
} else {
arr.push(line.trim());
n--;
if (n === 0) {
arr = arr.sort(function(a, b) {
if (a < b) return -1;
else return 1;
});
for (i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
}
}
});
//毫不廉耻的用了JS自带比较方法
发表于 2016-08-08 02:49:21
回复(0)
2
nodejs 飘过
const readline = require('readline');
const rl = readline.createInterface(process.stdin,process.stdout);
var data = [];
rl.on('line',function(ans){
data.push(ans);
var n = data[0]-0;
var arr = [];
if(data.length==n+1){
arr = data.slice(1);
arr.sort().map(function(i){console.log(i)});
data = data.slice(0,0);
}
})
发表于 2016-08-04 18:36:36
回复(0)
2
可以用插入排序,也可以用vectorSTL的sort函数
#include
#include
#include
using namespace std;
int main(){
int n;
while (cin>>n){
if (!n)
continue;
vector v;
for (int i = 0; i
string temp;
cin >> temp;
int j = 0;
for (; j < i && temp >= v[j]; ++j);
v.insert(v.begin() + j, temp);
}
for (int i = 0; i < v.size(); ++i){
cout << v[i] << endl;
}
}
return 0;
}
发表于 2016-06-17 07:15:21
回复(0)
2
import java.util.Scanner;
import java.util.Arrays;
import java.util.Comparator;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int n = in.nextInt();
String[] A = new String[n];
for(int i = 0;i
A[i] = in.next();
}
Arrays.sort(A,new Comparator(){
public int compare(String o1,String o2){
return o1.compareTo(o2);
}
});
for(int i =0;i
System.out.println(A[i]);
}
}
}
发表于 2016-03-19 12:55:55
回复(0)
3
#include
#include
#include
#include
using namespace std;
bool compare(const string s1, const string s2)
{
return s1
}
int main()
{
int n;
vector strs;
while (cin >> n)
{
while (n--)
{
string str;
cin >> str;
strs.push_back(str);
}
sort(strs.begin(), strs.end());
//sort(strs.begin(),strs.end(),compare);
for (int i = 0; i
{
cout <
}
}
return 0;
} 前面的输入都没有什么难的,主要是排序,可以使用algorithm中的sort排序,有两种形式,默认是以升序排列,正好符合此题,所以本人没有加bool函数,如果加的话要注意它只需要函数名,不需要括号。
发表于 2019-12-03 19:35:52
回复(0)
1
不用直接交换字符串,可以设置一个指针数组指向每一个串的首地址,然后对这个指针数组进行排序即可。使用快速排序算法: #include
#include
char ss[1000][101];
char* ps[1000];
void swap(int i, int j)
{
char* tmp = ps[i];
ps[i] = ps[j];
ps[j] = tmp;
}
int partition(int p, int r)
{
char* pivot = ps[r];
int i = p - 1, j;
for (j = p; j <= r - 1; ++j) {
if (strcmp(ps[j], pivot) <= 0) {
++i;
if (i != j) swap(i, j);
}
}
swap(i + 1, j);
return i + 1;
}
void qsort(int p, int r)
{
if (p >= r) return;
int q = partition(p, r);
qsort(p, q - 1);
qsort(q + 1, r);
}
int main()
{
int n;
scanf("%d", &n);
for (int i = 0; i < n; ++i) {
scanf("%s", ss[i]);
ps[i] = ss[i];
}
qsort(0, n - 1);
for (int i = 0; i < n; ++i) printf("%s\n", ps[i]);
return 0;
}
发表于 2021-02-24 22:32:38
回复(0)