C语言问题,急求!!

作者&投稿:攸试 (若有异议请与网页底部的电邮联系)
#include <stdio.h>
#include <string.h>
void main()
{
void compare(char*arr1, char*arr2, char*arr3);
char a[30], b[30], c[30];
printf("请输入第一个字符串:
");
scanf("%s", a);
printf("请输入第二个字符串:
");
scanf("%s", b);
printf("请输入第三个字符串:
");
scanf("%s", c);
char*p1 = a, *p2 = b, *p3 = c;
compare(p1, p2, p3);
printf("最小的字符串为:%s
排在中间的字符串为:%s
最大的字符串为:%s
", a, b, c);
system("pause");
}

void swap(char* s1, char *s2)
{
char temp[100];
strcpy(temp,s1);//temp = s1
strcpy(s1, s2);//s1 = s2
strcpy(s2, temp);//s2 = temp
}

void compare(char*arr1, char*arr2, char*arr3)
{
if (strcmp(arr1, arr2) > 0)
swap(arr1, arr2);

if (strcmp(arr1, arr3) > 0)
swap(arr1, arr3);

if (strcmp(arr2, arr3) > 0)
swap(arr2, arr3);
}

以上程序完美运行。可以达到你想要的效果。接下来讲讲为什么

首先主方法。

第三个字符串少了一个scanf.我给你加上了

你说的不能输入第二个字符串是不可能出现的情况,除非你用的gets

gets是从输入流中获取。流中没有等待用户输入,输入的内容还是在流中

scanf是从等待用户输入,不管输入流中有没有内容,他都等待。scanf收不了的内容,会进入流中。


在compare方法

这个就是逻辑问题了。

首先交换就出现问题了,

交换两个数据通常需要一个中间变量temp

如以下代码

temp = a

a = b

b= temp

这样才实现两个交换


字符串交换需要用strcpy.  因为字符串不能直接用 = 赋值。

注意是赋值。 初始化可以用等号。如char s[] = "abc"


你的核心问题就是 就是从小到大排序。

你解决的思路是对的。 但是实现出现了问题

不能先写三个strcmp ..在进行交换。你肯定会问为什么?

因为每次比较交换都可能交换字符串。一但交换数据,你预先存的大小关系就被打破了,你是用3个整形变量存的。


基本上回答完毕

-----------------------------

我说下我的思路。如果只是想看到从小到大的字符串,其实很简单,不用交换数组里的数据,只需改变最初指针指向即可。很好实现的,你试试。如果没做出来,说一声,我把代码贴上来。



一、不知道你是怎么输入的,可以提供一下你的运行截图,帮你看看
二、你程序中少了第三个输入语句啊
printf("请输入第一个字符串:\n");
scanf("%s",a);
printf("请输入第二个字符串:\n");
scanf("%s",b);
printf("请输入第三个字符串:\n");
scanf("%s",c); //这里是不是应该加上这个?
char*p1=a,*p2=b,*p3=c;

c语言问题,急求~

#include#include // 采用子串定位策略算法int strrindex(char s[],char t[],int *pos){int cHead[100]; // 计算子串首字母在母串的分布位置int i; // 循环用的变量int hLen=-1; // 记录定位到子串首字母的数量int subLen=strlen(t); // 子串的长度 int mainLen=strlen(s);// 母串的长度int findCount=0; // 找到的字串的数量int curIndex=0; // 匹配时用要移动的下标char cFirst=t[0]; // 子串首字母bool isALL; // 匹配子串是否存在母串for(i=0;i<100;i++) cHead[i]=-1;for (i=0;i<mainLen;i++){if(s[i]==cFirst) cHead[++hLen]=i; // 计算子串首字母在母串的分布位置}if(hLen<0) return 0; // 母串不存在这样的子串for (i=cHead[curIndex];i<mainLen;){ isALL=false; for(int j=0;j<subLen;j++) { if(t[j]==s[i+j]) isALL=true; else{ isALL=false; break; } } if (isALL) { findCount++; *pos=i; // 保存子串最后一次出现的位置(下标) } curIndex++; if(cHead[curIndex]!=-1) i=cHead[curIndex]; else i++;}return findCount; // 返回子串出现的次数}int main(void){int i=0;printf("子串在母串出现的次数:%d",strrindex("abcdkenefgkenweoia","ken",&i));printf("
最后一次字串在母串的位置:%d
",i);}

#include
#include
#include

void sort(char *p)
{
int i = 0;
int j = 0;
char tmp;
//冒泡排序法
for(i=0; p[i]!='\0'; i++)
{
for(j=i+1; p[j]!='\0'; j++)
{
if(p[i]<p[j])
{
tmp = p[i];
p[i] = p[j];
p[j] = tmp;
}
}
}
}

int main()
{
char str1[80] = {'\0'};
char str2[80] = {'\0'};
char str3[80] = {'\0'};
char str4[80] = {'\0'};
char str5[80] = {'\0'};
//接收5个字符串
gets(str1);
gets(str2);
gets(str3);
gets(str4);
gets(str5);
//排序
sort(str1);
sort(str2);
sort(str3);
sort(str4);
sort(str5);
//打印
printf("%s
", str1);
printf("%s
", str2);
printf("%s
", str3);
printf("%s
", str4);
printf("%s
", str5);

return 0;
}

急求c语言的问题!~谢谢各位高手~~
答:-1,这道题的难点在while(a--)的理解。while()的使用时当括号里成立的时候,继续循环,whlie(a--)后面为一个空语句,所以这个循环什么也不做。只是a自减。C中有逻辑值,当一个判断不成立时,它的返回值为-1,成立时为1。而这里面当a--到-1时,就等价于括号里面为假,这时跳出循环 ...

C语言问题!!!急求帮助!!
答:include <stdio.h> include <string.h> define MAX 200 char t[256]={0}; //字符转换到数字用 char index[]="0123456789abcdefghij"; //数字转换到字符用 void sum(char *a,char *b,char *c){int d[MAX]={0},i,n1,n2,*p;for(n1=strlen(a),p=d,i=n1-1;i>=0;i--)(*p++...

二级C语言程序问题 急求解!
答:在每个循环中间输出i,j,k的值 cout<<"i="<<i<<" j="<<j<<" k="<<k<<endl;第一个循环得到的值:i=1 j=0 k=0 i=2 j=0 k=0 i=3 j=0 k=0 i=4 j=0 k=0 i=5 j=0 k=0 第二个循环得到的值:i=5 j=1 k=0 i=5 j=2 k=0 i=5 j=3 k=0 i=5 j=4 k...

语言问题,急求~要求用循环做,由屏幕输入5位及以下数字,遇到0自动终止...
答:语言问题,急求~要求用循环做,由屏幕输入5位及以下数字,遇到0自动终止输入,算出输入的那几个数的和。 要求用循环做,由屏幕输入5位及以下数字,遇到0自动终止输入,算出输入的那几个数的和。我说的明白一点吧,我从键盘输入640,刚输完0,不用按回车,计算机自动把6+4的结果打印出来;输... 要求用循环做,由屏幕...

有关汇编语言的问题,急求,在线等
答:1.mov eax,ebx 这句是将寄存器ebx中的内容赋值给eax eax=ebx 2.mov eax,[ebx]是指以ebx为偏移地址,DS为数据段 求出的物理地址 取出该物理地址内存中双字的内容赋值给eax 3.mov eax,1234 该指令表示把十进制数1234(立即数)赋值给eax,但在内存中是以二进制表示的 4.mov eax,[1234]以1234...

C语言的一个问题。。急求~~
答:include <stdio.h> include <stdlib.h> include <string.h> include <errno.h> define MAXLINELENGTH 1024 //定义解析字符状态 enum CHARACTERTYPE { INIT,SPACE,TAB,PREVTAB,PREVSPACE,OTHER,END };int main (void){ FILE *fpin = NULL;//输入文件指针 FILE *fpout = NULL;//输出文件指针 ...

急求c语言问题
答:在标记的地方括号写成中文的了 include<stdio.h>int main(){ char sex,sports,diet; float faHeight,moHeight,a; scanf("%c%f%f%c%c",&sex,&faHeight,&moHeight,&sports,&diet); switch (sex) { case'm': a=(faHeight+moHeight)*0.54 ; // break; ...

急求c语言问题!
答:include<stdio.h>main(){int a;printf("请输入a");scanf("%d",&a);int b=15;if(a=b) //if后面的分号去电,括号里判断语句应该写成a==bprintf("it is%d",b); {if(a!=b)printf("错误");}while(1);//陷入死循环了return 0;//函数没有返回类型,不需要返回值}if后面的分号...

C语言的问题!!急求
答:你得明白i++和++i的区别。++i是i先自加然后使用i,i++是先使用i然后i再自加。第一个 a=1;b=++a; //这一行,a先自加,自加完之后a的值变为2,然后把2赋值给b,所以a和b都是2 c=a*b;//c = 2*2 =4 第二个 a=1;b=a++;//这一行,先把a的值(也就是1)赋值给b,此时b...

C语言编程问题,急求答案
答:使用冒泡的算法,将p后面的n-p-1个元素向前交换p+1次:include "stdafx.h"include <iostream> using namespace std;define N 1000 int main(){ int n, p;int num[N];cout << "请输入n值和p值:" << endl;cin >> n >> p;cout << "请输入" << n << "个数:" << endl;for...