题目 对输入的字符串进行排序后输出
输入 第一行n,第二行n个字符串,字符串之间用空格隔开
输出 一行排序后的字符串
#include <stdio.h>
#include <string.h>
int main() {
int num;
scanf("%d",&num);
char a[10];
for(int i=0;i<num;i++){
scanf("%s",&a[i]); //输入数组
}
for(int i=0;i<num;i++){
for(int j=i+1;j<num;j++){
char s;
if(strcmp(a[i],a[j])>0){
strcpy(s, a[i]);
strcpy(a[i], a[j]);
strcpy(a[j], s);
}
}
}
for(int i=0;i<num;i++){
printf("%s",a[i]); //输出数组
}
return 0;
}
我这代码好繁琐,但是逻辑是对的吧,我觉得。
看了别人的代码,真精简
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
int n;
scanf("%d",&n);
char a[n][100];
int num=0;
while(scanf("%s",&a[num])!=EOF){
num++;
}//先全部输入完再进行排序
qsort(a,n,sizeof(a[0]),strcmp);
for(int i=0;i<n;i++){
printf("%s ",a[i]);
}
return 0;
}
原来库里有这个函数啊
我还是想知道我错在了哪?
改动处见注释,供参考:
#include <stdio.h>
#include <string.h>
int main() {
int num;
scanf("%d",&num);
char a[20][64]; //修改 char a[10];
for(int i=0;i<num;i++){
scanf("%s",a[i]); //修改
//scanf("%s",&a[i]);
}
for(int i=0;i<num - 1;i++){//for(int i=0;i<num;i++)
for(int j=i+1;j<num;j++){
char s[64]; // char s; 修改
if(strcmp(a[i],a[j])>0){
strcpy(s, a[i]);
strcpy(a[i], a[j]);
strcpy(a[j], s);
}
}
}
for(int i=0;i<num;i++){
printf("%s ",a[i]);//输出数组 修改
}
return 0;
}
char s;?
这个长度不够
char s[100];
char a[10];
这个也不对,是char a[10][100];
#include <stdio.h>
#include <string.h>
void prochar(char *str, char c)
{
char *p;
for(p = str; *p != '\0'; p++)
if(*p != c)
*str ++= *p;
*str = '\0';
}
void main()
{
char str[80], char_c;
printf("请输入字符串:");
gets(str);
printf("请输入要删除的指定字符:");
scanf("%c", &char_c);
prochar(str, char_c);
puts(str);
}