Ⅰ c语言:输入三个字符串并按字母顺序排序后输出
我不大会改程序,这是我写的程序,我试过可以了,与你的要求符舍。
#include <stdio.h>
#include <string.h>
void main()
{
void ex(char *n[]);
char *name[3];
char a[10],b[10],c[10];
int i;
name[0]=a;
name[1]=b;
name[2]=c;
for(i=0; i<3; i++)
scanf("%s",name[i]);
ex(name);
printf("\n");
for(i=0; i<3; i++)
printf("%s\n",name[i]);
}
void ex(char *n[])
{
char *temp;
int i,j;
for(i=0; i<2; i++)
for(j=i+1; j<3; j++)
if(strcmp(n[i],n[j])>0)
{strcpy(temp,n[i]);
strcpy(n[i],n[j]);
strcpy(n[j],temp);
}
getchar();
}
问题
1.strcmp返回值是大小,但你用if(strcmp(*n[i],*n[j]))
的话只会检查是否等于0,不等于0则执行后面。。
所以应该是if(strcmp(*n[i],*n[j]>0).
2.for(j>i; j<3; j++) 在fork中没有j>i的写法改一下就行了
3.数组之间的交换不能用=的方式,要用strcpy语句
这是我个人的看法,还有问题写我联系,我QQ:452497054
有兴趣的话交个朋友
Ⅱ C语言 对输入的n个字符串进行排序,并输出(排序过程中会改变字符串真正的存放位置)
#include<stdio.h>
#include<string.h>
void main ()
{
char s[10][100],t[100];//用二维数组最大输入10个字符串,T为装字符串的数组
int n=0,i,j,k;
scanf("%d",&n);//输入次数
for(i=0;i<n+1;i++){//输入n次字符串//是i<n+1,不是i<n,也可以改为i<=n
gets(s[i]);
}
for(i=0;i<n+1;i++)//扫描5次字符串组
{
for(j=i+1;j<n+1;j++)
{
if(strcmp(s[i],s[j])>0)//从小到大排列
{
strcpy(t,s[i]);//数组赋值用strcpy不能用=这个方式
strcpy(s[i],s[j]);
strcpy(s[j],t);
}
}
}
for(i=0;i<n+1;i++){//是i<n+1,不是i<n,也可以改为i<=n
puts(s[i]);
}
}
Ⅲ C语言(1)输入1个字符串,对该字符串按字符大小从小到大的顺序排序,然后输出这个已经排好序的字符串。
#include<stdio.h>
int main( )
{char s[100],*p,*p1,*p2,c;
gets(s); //读取字符串
for(p=s;*p;p++); //求得串长,p指向'\0'
p--; //冒泡排序外循环终点
for(p1=s;p1<p;p1++,p--) //此二重循环为冒泡排序
for(p2=s;p2<p;p2++)
if(*p2>*(p2+1))
{c=*p2;*p2=*(p2+1);*(p2+1)=c;}
puts(s);
return 0;
}
程序2:
#include<stdio.h>
int main( )
{char s1[100],s2[100],s3[200],s4[200],*p,*p1,*p2;
gets(s1); //读取二个字符串
gets(s2);
for(p=s1,p1=s3;*p;) //复制s1到s3前部
*(p1++)=*(p++);
for(p=s2;*p;) //复制s2到s3后部
*(p1++)=*(p++);
*p1=*p; //设置字符串尾
for(p=s2,p1=s4;*p;) //复制s2到s4前部
*(p1++)=*(p++);
for(p=s1;*p;) //复制s1到s4后部
*(p1++)=*(p++);
*p1=*p; //设置字符串尾
for(p1=s3,p2=s4;*p1==*p2;p1++,p2++); //比较s3与s4逐个字符的大小,直到遇到不同的字符
if(*p1>*p2)puts(s3); //输出较大字符所在的字符串
else puts(s4);
return 0;
}
Ⅳ c语言中从键盘输入N个字符串,将字符串按从小到大的顺序排列并输出
代码如下:
#define N 10 int main(){char str[N][100]; int i,j; for(i = 0; i < N; i ++) scanf("%s",str[i]); for(i = 0; i < N-1; i ++) { for(j = i+1; j < N; j ++){ if(strcmp(str[i],str[j])>0) { char temp[100]; strcpy(temp,str[i]); strcpy(str[i],str[j]); strcpy(str[j],temp);} } } for(i = 0; i < N; i ++) puts(str[i]);}。
运行代码:
(4)C语言子串排序输出扩展阅读
在C语言编程中,常常需要对字符串比较和排序,经常遇到对字符串整体的控制等操作,strcmp 比较str1和str2的大小,而其它的c函数strlen(),字符串拷贝函数strcpy()/strncpy(),字符串比较函数 strcmp(),字符串连接函数strcat()/strncat()等,都可以帮助我们快速方便的对字符串操作。
Ⅳ c语言中从键盘输入N个字符串,将字符串按从小到大的顺序排列并输出
1
输入字符串;
2
对字符串进行排序;
3
输出。
排序中需要注意:
1
用strcmp比较字符串;
2
用strcpy执行字符串的赋值。
代码如下:
#define N 50
int main()
{
char s[N][100];
int i,j;
for(i = 0; i < N; i ++)
scanf("%s",s[i]);
for(i = 0; i < N-1; i ++)
{
for(j = i+1; j < N; j ++)
{
if(strcmp(s[i],s[j])>0)
{
char t[100];
strcpy(t,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],t);
}
}
}
for(i = 0; i < N; i ++)
puts(s[i]);
}
Ⅵ C语言编程题: 输入10个字符串,将其从大到小排序后输出。
#include<stdio.h>
void swap1(int *p,int n){
int temp;
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(p[i]>p[j]){
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
void swap2(int *p,int n){
int temp;
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(p[i]<p[j]){
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
int main(){
char n;int a[15];
while(~scanf("%c",&n)){
for(int i=0;i<10;i++){
scanf("%d",&a[i]);
}
getchar();
if(n=='A') swap1(a,10);
else swap2(a,10);
for(int i=0;i<10;i++){
if(i==0)printf("%d",a[i]);
else printf(" %d",a[i]);
}
printf(" ");
}
}
运行效果:
(6)C语言子串排序输出扩展阅读:
printf函数使用注意事项
1、域宽
%d:按整型数据的实际长度输出。
如果想输出指定宽度可以指定域宽,%md-->m域宽,打印出来以后,在控制台上,显示m位;
如果我们要打印的数的位数如果超过我们设定m则原样输出;
如果我们要打印的数的位数如果小于我们设定的位数,则补空白,具体如下:
如果m为正数,则左对齐(左侧补空白);
如果m为负数,则右对齐(右侧补空白)。
2、转义字符
如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示。
如:printf("%f%%",1.0/3);输出结果:0.333333%。
Ⅶ C语言编程题,输入5个字符串,然后排序
#define LINEMAX 20/*定义字符串的最大长度*/
int main()
{int i;
char**p,*pstr[5],str[5][LINEMAX];
for(i=0;i<5;i++)
pstr<i>=str<i>;/*将第i个字符串的首地址赋予指针数组pstr的第i个元素*/
printf("input 5 strings: ");
for(i=0;i<5;i++)
scanf("%s",pstr<i>);
p=pstr;
sort(p);
printf("strings sorted: ");
for(i=0;i<5;i++)
printf("%s ",pstr<i>);
}
sort(char**p)/*冒泡法对5个字符串排序函数*/
{int i,j;
char*temp;
for(i=0;i<5;i++)
{for(j=i+1;j<5;j++)
{if(strcmp(*(p+i),*(p+j))>0)/*比较后交换字符串地址*/
{temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
}
}
}
return 0;
}
(7)C语言子串排序输出扩展阅读:
printf()函数的调用格式为:printf("<格式化字符串>",<参量表>)。
其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以"%"开始,后跟一个或几个规定字符,用来确定输出内容格式。
参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用","分开,且顺序一一对应,否则将会出现意想不到的错误。
比如:
int a=1234;
printf("a=%d ",a);
输出结果为a=1234。
scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include<stdio.h>。
int scanf(const char*restrict format,...);
函数scanf()是从标准输入流stdin(标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。
如:
scanf("%d%d",&a,&b);
函数返回值为int型,如果a和b都被成功读入,那么scanf的返回值就是2。
Ⅷ C语言题:将一组字符串按字典顺序输出。(通过函数调用完成)
将一组字符串按字典顺序输出的源代码如下:
#include <stdio.h>
int main ()
{
char name[40] ; //声明一个叫name的储存空间,数组的元素数目是40
printf("what is your name ? ");//转化说明字符/n换行
scanf("%s,name");//输入一个字符串,使用了%s的转化修饰符,表示输入字符串
printf("hello,%s. ",name);//输出字符串
return 0;
}
(8)C语言子串排序输出扩展阅读
1、两个字符串,如果两个字符串相等,则返回0;若str1大于str2(对于大于的理解,是指从两个字符串的第一个字符开始比较,若两个字符相同,则继续比较,若发现两个字符不相等。
2、对于将数字转换为字符串,c标准中并没有定义。c标准中没有定义的原因我觉得是数字转成字符串可以使用sprintf格式化输出函数来完成。
Ⅸ C语言程序:将若干字符串按字母顺序(由小到大)输出
两个程序代码都可以,教材中的代码相比较效率要高,因为教材中的算法每次遇到字符串小的只是单纯 对k赋值一次,而你的是每次都要交换数值(指针),假设最终交换了2次,对赋值而言教材算法运行2+1次,你的是3*2次
Ⅹ C语言中如何将10个字符串进行排序
#include<stdio.h>
#include<string.h>
int main()
{
int j,k,i,t,n;
char s[10][10],b[10][10];
for(i=0;i<10;i++)
{
scanf("%s",s[i]);
}
n=strlen(s[1]);
k=0;
for(i=0;i<9;i++)
{
for(j=0;j<9-i;j++)
if(strcmp(s[j],s[j+1])>0)
{
for(k=0;k<n;k++)
b[j][k]=s[j][k];
for(k=0;k<n;k++)
s[j][k]=s[j+1][k];
for(k=0;k<n;k++)
s[j+1][k]=b[j][k];
}
}
for(i=0;i<10;i++)
{
printf("%s ",s[i]);
}
return 0;
}
运行效果:
(10)C语言子串排序输出扩展阅读:
scanf函数用法:
scanf("输入控制符",输入参数);
功能:将从键盘输入的字符转化为“输入控制符”所规定格式的数据,然后存入以输入参数的值为地址的变量中。
用scanf()函数以%s格式读入的数据不能含有空白符时,所有空白符都被当做数据结束的标志。所以题中函数输出的值只有空格前面的部分。
如果想要输出包括空格在内的所有数据,可以使用gets()函数读入数据。gets()函数的功能是读取字符串,并存放在指定的字符数组中,遇到换行符或文件结束标志时结束读入。换行符不作为读取串的内容,读取的换行符被转换为字符串结束标志'