C语言中请高手帮忙修改下下面程序,结果能使单词排序时,不区分大小写。(排序已经完成)。
1。C语言程序设计中区不区分大小写?
区分大小写.
例如:abc,Abc,aBc,abC,ABc,aBC,AbC 它们是不同的量。
例如系统保留字和函数 float, double, int, if, for, sin, cos, EOF, NULL 大小写不能错。
2。格式很重要吗?例如有的需要前面空两格,不空会不会有严重后果?
程序书写中的空格符很重要, 例如: *b 是指针b的值,
而 a * b 是变量a乘变量b. 空格符是C语言中基本元素与基本元素(token) 的分隔符。
至于“需要前面空两格”,应当不是重要问题,也许需要一个空格,也许可以两个都不要,要看具体情况。
标准库好像没有。但正则匹配就有。如果用的 unix 类系统,可以 man 一下 regcomp 这个函数。
写一个函数,返回一个字母的大写字母的ASCII码,如果本身是大写字母,则返回自身的ASCII码,然后在判断函数外面增加这个函数就可以了.不过估计strcmp是不能用的.
还有一种方法,就是把你的字符串放到临时串里面转大写,然后再排序.
这么多解决办法,为什么自己没想到还来问呢?
=================
stricmp是非标准函数~~
用strcmp(str1,str2)呀,如果str1>str2返回正值,若str1<str2返回负值,若str1==str2返回值为0.
希望对你有帮助。满意分给俺呀
用stricmp函数比较字符串,很简单
比较字符串小写时候的大小,当然不会把你原来字符串变成小写
想到过把字符串放到临时字符串里先保存,怎么转换呢?
我现在刚学,属于菜鸟。请在指点一下
#include
#include
char up_ascii(char tmp)
{
if(tmp = 'a')
return tmp - 32;
return tmp;
}
/* 这个函数源自linux的LIB库的源代码 */
int my_strcmp1(const char * cs,const char * ct)
{
register signed char __res;
while (1) {
if ((__res = up_ascii(*cs) - up_ascii(*ct++)) != 0 || !*cs++)
break;
}
return __res;
}
/* 这个是使用临时字符串。当然也可以不用上述的函数。
如果你愿意可以用MALLOC函数来定义长度。
但是别忘记了要判断返回指针是否为NULL,并且结束时候FREE指针 */
#define BUFF_LEN 1000
int my_strcmp2(const char * cs,const char * ct)
{
char buff1[BUFF_LEN];
char buff2[BUFF_LEN];
int i;
i=0;
do
buff1[i] = up_ascii(cs[i]);
while(cs[i++]);
i=0;
do
buff2[i] = up_ascii(ct[i]);
while(ct[i++]);
return strcmp(buff1,buff2);
}
int main(void)
{
char buff1[100];
char buff2[100];
strcpy(buff1,"abcd");
strcpy(buff2,"aBCD");
printf("[%s,%s]%d,%d,%d\n",buff1,buff2,my_strcmp1(buff1,buff2),my_strcmp2(buff1,buff2),strcmp(buff1,buff2));
strcpy(buff1,"azcd");
strcpy(buff2,"aBCD");
printf("[%s,%s]%d,%d,%d\n",buff1,buff2,my_strcmp1(buff1,buff2),my_strcmp2(buff1,buff2),strcmp(buff1,buff2));
strcpy(buff1,"abcd");
strcpy(buff2,"zBCD");
printf("[%s,%s]%d,%d,%d\n",buff1,buff2,my_strcmp1(buff1,buff2),my_strcmp2(buff1,buff2),strcmp(buff1,buff2));
return 0;
}
你没有看明白我的问题,是没有变成小写?但是排序的时候,不能排在小写的行列,比如输出时想要得到:
abc
ABD
abe
但是我输出的时候总是:
abc
abe
ABD
先排列小写,之后才出来大写。我希望得到是,大小写不区分。
stricmp(ABD,abe)结果是小于0;
这个函数不同于strcmp
stricmp内部先吧ABD,abe都转化成小写再比较大小
C语言中请高手帮忙修改下下面程序,结果能使单词排序时,不区分大小写。(排序已经完成)。视频
相关评论:
蔺独郑stricmp是非标准函数~~
蔺独郑int target = 0;printf("请输入15个数:\\n");for(i=0; i<15; i++){ scanf("%d", a+i);} printf("\\n请输入要查找的数:\\n");scanf("%d", &target);ret = binary_find(a, target, 0, 14);if(-1 != ret){ printf("\\n%d找到了, 它是a[%d]\\n", target, ret);} ...
蔺独郑if(c == 'b'){ printf("本校夜大学生,你的要选修的学分\\n");scanf("%d", &x);if(x <= 12){ printf("本校夜大学生,你的学费是200元\\n");} else { printf("本校夜大学生,你的学费是%d元\\n", 200+(x-12)*20);} } if(c == 'c'){ printf("外校学生,你的要选修的学...
蔺独郑include <stdio.h> include <stdlib.h> typedef struct BiTNode\/\/定义结构体 { char data;struct BiTNode *lchild,*rchild;}BiTree;void CreateBiTree(BiTree *T) \/\/前序创建树 { char ch;scanf("%c",&ch);if(ch==' ') T=NULL;else { T=(struct BiTNode *)malloc(sizeof(struct Bi...
蔺独郑C语言老手为你解答:CBCCC CCAC(C)DDDA 。第1题已确定选C,不必怀疑,(只有新手才会错选D);第10题如果是你无意漏掉了C的分号,那么原题选C,如果原题就没分号,那么原题没有答案;第14题出的不太好,因为这个程序的错误有多种纠正方法(纠正的位置不同),因此关于它出错的地方也可以有多种...
蔺独郑{p->next=q->next;\/\/把q指向的表中next代表的地址赋给p指向的表中next,即表头的next中存放了表1中next的值,此值是表2的地址 free(q);\/\/释放q的存储空间 q=p->next;\/\/q指向p指向的链表中next中表示的地址单元 } else\/\/p,q指向的表里的data不相等时 {p=q;\/\/p指向表1 q=q->...
蔺独郑编译是没有问题,但你代码有错误。1。void output (SCORE*p,int n){ int i;printf("\\n%s%5s%5s%5s","Number","Engl","Math");上句少一个参数。格式符有4,而相应变量只有3个。2。printf("English Mathema Physic plutonomy history:");scanf("%d%d%d",&p->req.english,&p->req....
蔺独郑首先从主函数开始看题,sort(&aa[3],5);之前我们已经知道sort函数的功能是进行排序,sort(&aa[3],5)这条语句明确地告诉我们排序的开始位置在aa[3],即从第四个元素开始排序(数组最基本的知识,aa[0]存储第一个元素),接着就调用sort函数进行排序,以第八个元素结束。此排序过程为冒泡(起泡)...
蔺独郑改后的程序:include "stdio.h"include "stdlib.h"include "time.h"void main(){ int n,i,j,squ[10][10];srand((unsigned)time(0));for(i=0;i<10;i++){ for(j=0;j<10;j++){ \/\/产生随机数,&&&这部分我帮你改了&&& n=rand()%1000;squ[i][j] = n;\/\/显示部分 if(squ...
蔺独郑36.A 45.C 47.C 50.D 58.B 【解析】32.字符串数组除了里面的实际字符,系统还会自动的分配一个结束符"\\0",所以该数组所占空间为6+1=7个。33.一句话说不明白,放心,已经通过程序验证,答案肯定正确。36.括号内的只能算是一个参数。45.因为是static定义的静态变量,所以x的值是无法更改的,...