今天进行了对字符串的巩固练习,并从中选出两道题进行展示
第一题:从键盘输入一个字符串,并对这个字符串进行排序
解:对字符串进行排序就是对字符所对应的ASCII进行比大小排序,利用两个函数把它进行从大到小和从小到大排序
//1
void px(char *p,int a){
int i,j;
char x;
for(i = 0; i < a - 1; i++){
for(j = 0;j < a - 1 - i;j++){
if(p[j] > p[j + 1]){
x = p[j];
p[j] = p[j + 1];
p[j + 1] = x;
}
}
}
for(i = 0; i < a; i++)
{
printf("%c", p[i]);
}
}
void px2(char *p,int a){
int i,j;
char x;
for(i = 0; i < a - 1; i++){
for(j = 0;j < a - 1 - i;j++){
if(p[j] < p[j + 1]){
x = p[j];
p[j] = p[j + 1];
p[j + 1] = x;
}
}
}
for(i = 0; i < a; i++)
{
printf("%c", p[i]);
}
}
int main(){
char ch[100];
gets(ch);
puts(ch);
char *pch = NULL;
pch = ch;
int x = strlen(ch);
px(ch,x);
printf("\n");
px2(ch,x);
return 0;
}
第二题:从键盘输入六个字符串,并对这些字符串进行排序
解:和上题一样是对ASCII进行比大小,不同的是,可以创建一个二维字符数组,见后对数组的每一行字符串进行排序
//2
void px(char arr[][100],int n){
int i,j;
char temp[10];
for(i = 0; i < n - 1; i++){
for(j = 0; j < n - 1 - i; j++){
if(strcmp(arr[j], arr[j + 1]) > 0){
strcpy(temp, arr[j]);
strcpy(arr[j], arr[j + 1]);
strcpy(arr[j + 1], temp);
}
}
}
for(i = 0; i < 6; i++){
printf("%s ",arr[i]);
}
}
int main(){
int i;
char arr[6][100] = {'\0'};
for(i = 0; i < 6; i++){
gets(arr[i]);
}
px(arr,6);
return 0;
}