c语言怎么不用strcmp按字典顺序对多个字符串排序

作者&投稿:佛迹 (若有异议请与网页底部的电邮联系)
c语言怎么不用strcmp按字典顺序对多个字符串排序?~

自己做strcmp和strcpy子函数,或者把能实现相同功能的子函数模块用for循环来处理
strcmp子函数的功能是比较str1和str1字符串的每个字符
用一个for循环来实现这个功能的
功能实现,模拟着函数
void mystrcmp(char *str1,char *str2)
{
int i;
for(i=0;str1[i]||str2[i];i++)
if(str1[i]<str2[i])
retrun -1;
else if(str1[i]>str2[i])
return 1;
return 0;

}

strcpy拷贝子函数也是用一个for循环来实现的
void mystrcpy(char *str1,char *str2)
{
int i=0;
while(str1[i]=str2[i])
i++;

}

你完全可以把这个功能模块用着相应的位置

for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
排序大循环没问题

for(;k<l;k++)
{
if(*(str[i]+k)!=*(str[j]+k)) //你这里只是判断了不相等的情况,大小没有判断

这一块应该是比较部分吧,感觉应该不对
应该是
for(k=0;str[i][k]||str[j][k];k++)
{
if(str[i][k]>str[j][k]) //也可以用指针,大了就交换,小了或等于不交换

交换代码

}

l=min(strlen(str[i]),strlen(str[j]));
这一句完全可以用l=strlen(str[i])>strlen(str[j])?strlen(str[i]):strlen(str[j]);
不用子函数,或者一个if--else来解决

temp=str[j];
str[j]=str[i];
str[i]=temp;
这是交换的代码,字符串不能这么交换,可以用strcpy拷贝函数,或者字符一个一个的交换
不能整个字符串用=来赋值

#include
#include
int main()
{
char *t;
int i,j,n;
char *s[]={"pascal","basic","fortran","turbo C"};
n=4;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(strcmp(s[j],s[j+1])>0)
{t=s[j];s[j]=s[j+1];s[j+1]=t;}
for(i=0;i<n;i++)
puts(s[i]);

return 0;
}

自己做strcmp和strcpy子函数,或者把能实现相同功能的子函数模块用for循环来处理
strcmp子函数的功能是比较str1和str1字符串的每个字符
用一个for循环来实现这个功能的
功能实现,模拟着函数
void mystrcmp(char *str1,char *str2)
{
int i;
for(i=0;str1[i]||str2[i];i++)
if(str1[i]<str2[i])
retrun -1;
else if(str1[i]>str2[i])
return 1;
return 0;

}

strcpy拷贝子函数也是用一个for循环来实现的
void mystrcpy(char *str1,char *str2)
{
int i=0;
while(str1[i]=str2[i])
i++;

}

你完全可以把这个功能模块用着相应的位置

for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
排序大循环没问题

for(;k<l;k++)
{
if(*(str[i]+k)!=*(str[j]+k)) //你这里只是判断了不相等的情况,大小没有判断

这一块应该是比较部分吧,感觉应该不对
应该是
for(k=0;str[i][k]||str[j][k];k++)
{
if(str[i][k]>str[j][k]) //也可以用指针,大了就交换,小了或等于不交换

交换代码

}

l=min(strlen(str[i]),strlen(str[j]));
这一句完全可以用l=strlen(str[i])>strlen(str[j])?strlen(str[i]):strlen(str[j]);
不用子函数,或者一个if--else来解决

temp=str[j];
str[j]=str[i];
str[i]=temp;
这是交换的代码,字符串不能这么交换,可以用strcpy拷贝函数,或者字符一个一个的交换
不能整个字符串用=来赋值

这样修改就没问题了,不明白可以追问!
#include<stdio.h>
#include<string.h>
int min(int a,int b)
{
if(a>b) return b;
else
return a;
}
int main()
{
char *str[]={"turbo c","turbo pascal","basic","dbase","lisp","fortran"};
int i,j,k=0,l,n;
char *temp;
scanf("%d",&n);
for(i=0;i<n;i++){
for(j=0;j<n-1-i;j++){
l=min(strlen(str[j]),strlen(str[j+1]));
printf("%d\n",l);
for(k=0;k<l;k++){
if(*(str[j]+k)!=*(str[j+1]+k)){
if(*(str[j]+k)>*(str[j+1]+k)){
temp=str[j+1];
str[j+1]=str[j];
str[j]=temp;
}
}
}
}
}
for(i=0;i<n;i++)
printf("%s\n",str[i]);
return 0;
}


C语言问题,为什么字符型不用加取地址符,而double型要加取地址符?_百度...
不用加取地址符的是字符串型,而字符串名的实质其实是这个字符数组首字符的指针比如一个字符串str[10]="hello",其数据如下排列:str[0]---'h'str[1]---'e'str[2]---'l'str[3]---'l'str[4]---'o'str[5]---'\\0'而我们向scanf传入的并不是单独某个字符,而是字符串名str 字符串...

c语言! 编一程序,将两个字符串连接起来,不要用strcat函数.
思路:字符串连接先需要找到第一字符串的结束位置,接着把第二字符串元素放到第一字符串后面,最后加上结束标志即可。参考代码:拼接123和456 include<stdio.h>void mystrcat(char a[],char b[]){\/\/字符串连接函数 int i=0,j=0;while(a[i++]!='\\0');\/\/找到a的结束位置 i--;while(b[j...

如何用C语言写:不用strcpy()函数,编写一个能将一个字符串复制到一个...
using namespace std;char * mystrcpy(char * strDest,const char * strSrc){ if ((strDest==NULL)||(strSrc==NULL)) \/\/[1]throw "Invalid argument(s)"; \/\/[2]char * strDestCopy=strDest; \/\/[3]while ((*strDest++=*strSrc++)!='\\0'); \/\/[4]return strDestCopy;} int ...

c语言中strlen、str、len分别指的是什么意思?
str -- 通常,程序员喜欢用它作 字符串 变量名。它是 string(英文词 字符串 的缩写)len -- 通常,程序员喜欢用它作 变量名。它是 length(英文词 长度 的缩写)。例如:char str[20]="I am a student";int len;len = strlen(str);printf("the string length is: %d",len);

用c语言编写程序,不使用strlen函数,求字符串的串长
即为字符串长度。代码如下:include <stdio.h>int main(){ char s[100]; int i; scanf("%s",s);\/\/输入字符串。 for(i = 0; s[i]!='\\0'; i ++);\/\/循环体为空,退出时i值即为字符串长度。 printf("%d\\n", i); \/\/输出。 return 0;} ...

汇编语言中的STR是什么意思.还有CALL指令怎么用?
ARM的汇编中有STR指令,STR是寄存器数据放到内存,即存储(写).与LDR意思相反。回复不要乱选满意答案,会误导的,看评论 已赞过 已踩过< 你对这个回答的评价是? 评论 收起 istone107 2012-09-08 知道答主 回答量:51 采纳率:100% 帮助的人:21.3万 我也去答题访问个人页 关注 展开全部 STR是...

我在学习c语言,请问"scanf["%[^\\n]",str];"语句中的“[^\\n]"是啥意...
意思是非'\\n'。也就是说只要没有遇到换行就继续输入,当遇到换行符的时候此语句结束。而默认情况是遇到换行语句执行结束,但是str的值只是第一个空格前的值。但这样写,按回车时scanf执行完,中间所有内容包括空格都会输入到str中去。

C语言问题,将两个字符串连接起来,要求不用strcat()函数。
void main(){ char lj(char m[100],n[100]);\/\/长度任意定,但必须分别大于你要连接的两个字符串 char a[100],b[100];gets(a);gets(b);lj(a,b);puts(a);} char lj(char m[100],n[100]){ int i,j;for(i=0;m[i];i++);for(j=0;n[j]!='\\0';i++,j++)m[i]...

C语言不用函数strcat(),
dstStr[n1+n2]='\\0'; \/\/ 最后加一个字符串结束符,作结束标记 return dstStr; \/\/ 与 strcat 一样的功能,返回 成果 字符串 首地址。} int main(){ char srcStr[80]="abcd 1234 XYZ"; \/\/ souce string char dstStr[200]="987 DCBA xyz"; \/\/ destination string printf("...

c语言怎么不用strcmp按字典顺序对多个字符串排序
if(*(str[i]+k)!=*(str[j]+k)) \/\/你这里只是判断了不相等的情况,大小没有判断这一块应该是比较部分吧,感觉应该不对应该是for(k=0;str[i][k]||str[j][k];k++){ if(str[i][k]>str[j][k]) \/\/也可以用指针,大了就交换,小了或等于不交换 交换代码}l=min(strlen(str[i]),strlen(str...

宜丰县13781461653: 编写C语言程序,不使用strcmp函数,比较任意两个字符串的大小 -
检昨蒲公: char *str1,*str2,*p; printf("input str1\n"); gets(str1); printf("input str2\n"); gets(str2); ch1=str1[0]; ch2=str2[0]; p=str1; s=sizeof(str1); while(ch1==ch2) { *str1++; *str2++; } if(str1==*p+s)flag=0; else{if((str1+1)-(str2+1)>0)flag=1;elseif((...

宜丰县13781461653: C语言问题:不用strcmp函数比较两个字符串的大小 -
检昨蒲公: 这句中的]&&a[i]!='\0'是什么有什么作用? 防止两个字符串都是null要是a[100]比b[100]小,也就是a[100]先到'\0'那怎么比较呢! '\0'就是0

宜丰县13781461653: C语言 不用strcmp() 实现字符串比较 -
检昨蒲公: 判断字符串str1是不是已经结束了,这里判断不严密,str1与str2都应判断是否已经结束.while( (str1[i]!='\0')&&(str2[i]!='\0')) if (str1[i]!=str2[i])break; else i++; //继续判断下一个字符

宜丰县13781461653: c语言中不用strcmp怎么进行两字符串的比较 -
检昨蒲公: int compare(char *a,char *b) { int i; if(strlen(a)!=strlen(b)) return 0; for(i=0;i if(a[i]!=b[i]) return 0; } return 1; }

宜丰县13781461653: C语言字符串排序,不用指针 按照从小到大排序 -
检昨蒲公: 这个可以把字符串等效为一个数, 利用冒泡排序, 它们的思想是一样的, 也用两个循环

宜丰县13781461653: 用C语言编程不用strcat实现字符串大小的比较 -
检昨蒲公: 注意:字符串的比较大小不是比较长度,而是比较对的的ASCII码值,与长度无关,例如:"asd"和"z"比较,"z"大,只有前面相同时才比较后面的,下面的程序的执行结果你可以换成strcmp()或者memcmp()函数执行来对比一下我测...

宜丰县13781461653: c语言怎么实现输入不同类型数据时不分顺序 -
检昨蒲公: 第一个问题我也不会,对于第二个问题:一、可以利用数组定义字符串:(1)逐个字符输入输出,用格式符“%c”,比如char[5]={'l','e','a','r','n'}; for(int i=0;i<5;i++){printf("%c",c[i]);}——————单个字符用单引号(2)将整个字符串一次输入...

宜丰县13781461653: 求一个C语言比较字符串的函数,不是用strcmp函数
检昨蒲公: 如果不用strcmp,那就自己写一个比较函数 int s_bijiao(char *s1,char *s2) { while (*s1 == *s2++) { if (*s1++ == 0) return (0); return (*s1 - *(s2-1)); } } 代码测试了吗?

宜丰县13781461653: 请教c语言输入三门课程的英文名称,要求按字典顺序排序? -
检昨蒲公: #include <stdio.h>#include <string.h>#include <stdlib.h>#define N 3#define LONG 20 void MyCmp(char *x[N]); void main() { char *a[N]; int i; for(i=0;i<N;i++) //初始化 { a[i]=(char *)malloc(LONG); } for(i=0;i<N;i++) //输入 { printf("请输入第%d本...

宜丰县13781461653: 编写c语言程序,比较4个字符串的大小,不要用strcmp函数(自编具有strcmp功能的子函数). -
检昨蒲公: 提供算法可以么..1.放入4个字符串数组 比较A[i] B[i] C[i] D[i] 2.设置index数组初始化为index{0}; 在一轮A B C D 比较后设置已分出顺序的字符串 设置其下标,最小设置为1.其余类推 选出仍然为0的index[]继续1 2 循环 直到分出所有下标 若2数组一样则按照数组出现顺序排

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网