题目
对输入的字符串进行排序后输出
第一种情况(输入一组数据):
输入描述
输入有两行,第一行n;第二行是n个空格隔开的字符串
输出描述
输出一行排序后的字符串,空格隔开,无结尾空格
样例:
输入:
5
c d a bb e
输出:
a bb c d e
解题代码
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
int main(){
int n;
freopen("in.txt","r",stdin);
scanf("%d",&n);
char str[1000];
/*
在进行n的输入之后,如果需要使用gets(),则需要先使用getchar()先吸收n后面的空格;
*/
getchar();//吸收空格
gets(str);//输入原字符串
char del_str[50][100]; //使用二维数组存放分隔后的字符串
char *tmp=strtok(str," ");
int k=0;//用来记录分隔后字符串的个数
while(tmp!=NULL){
strcpy(del_str[k],tmp);
tmp=strtok(NULL," ");
k++;
}
//sort(del_str,del_str+i);
for(int i=0;i<n-1;i++){ //选择排序
for(int j=i+1;j<n;j++){
//strcmp用来进行字符串的比较;
if(strcmp(del_str[i],del_str[j])>0){
char tmp[100];
strcpy(tmp,del_str[i]); //交换
strcpy(del_str[i],del_str[j]);
strcpy(del_str[j],tmp);
}
}
}
for(int j=0;j<k-1;j++){
printf("%s ",del_str[j]);
}
printf("%s",del_str[k-1]); //最后一个
}
第二种情况(多组输入不知道有几组):
输入描述
多个测试用例,每个测试用例一行。每行通过空格隔开,有n个字符,n<100
输出描述
对于每组测试用例,输出一行排序过的字符串,每个字符串通过空格隔开
样例:
输入:
a c bb
f dddd
nowcoder
输出:
a bb c
dddd f
nowcoder
解题代码
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int main(){
char str[50][200];//存放原来的字符串
int i=0;
freopen("in.txt","r",stdin);
/*
两种写法:
while( gets(str[i])!= NULL )
while( scanf("%s",str[i]) !=EOF )
*/
while( gets(str[i])!= NULL ){
/*
前面一开始使用的就是gets(),所以此处不需要吸收换行;
*/
//getchar();
char div_str[50][100];//每一行的字符串拆分jujm
char *tmp=strtok(str[i]," ");
int j=0;//记录每一行分隔后字符的个数
//分隔字符串
while(tmp!=NULL){
strcpy(div_str[j],tmp);
tmp=strtok(NULL," ");
j++;
}
//选择排序
for(int k=0;k<j-1;k++){
for(int m=k+1;m<j;m++){
if(strcmp(div_str[k],div_str[m])>0){//递增顺序
char tmp1[100];
strcpy(tmp1,div_str[k]);
strcpy(div_str[k],div_str[m]);
strcpy(div_str[m],tmp1);
}
}
}
//输出字符串
for(int k=0;k<j;k++){
printf("%s ",div_str[k]);
}
printf("\n");
i++;
}
}
注意:
存放原始字符串可以直接使用一维数组;
char str[100];
while( gets(str)!=NULL ){
}