C语言中说的按字典顺序是啥意思???

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中说的按字典顺序是啥意思???相关的知识,希望对你有一定的参考价值。

是说按abc........这样排?那大写和小写怎么排?
还是按字符的ACII码排?那是从大到小还是从小到大排?
还是按其他什么方式排?
那位高手知道解释下啊?

你可以看看字典里的单词是怎么排序的啊,先大写字母,然后小写字母吧
比如A, a, ab, abc, ac排序应该是
A, a, ab, abc, ac
先比较第一个字符,A比a在前,所以第一个是A,比较第二个,a只有一个字符,自然最小,后面是b比c小,所以ab,abc在ac前,ab,abc再比较,第三个字符,ab没有了,就排在abc前
参考技术A

就是说,将多个字符串的同一位置的字符按照26个字母的顺序进行比对。a最小,z最大。

a < b;

aa < ab;  因为第二位置上,前面字符串是a,后面字符串是b,所以是小于关系,以此类推。

C语言排序算法:快速排序:

1、假设我们给一个int数组进行排序,数组中数字初始序列为int a[9]=3,6,5,9,7,1,8,2,4

2、分析快速排序的原理前,我们先声明一些东西,首先设置一个临时变量用来存放随机取出数组中的一个数,一般我们取数组的第一个元素也就是说temp=a[0],同时设置两个游标分别指向数组第一个元素和最后一个元素。

三、算法的基本运算步骤为:1、依次比较数组的后游标所指与temp的大小,如果temp<a[j],则j--,直到遇到第一个temp>a[j],则停止移动,将a[j]赋值给a[i]

四、算法的基本运算步骤为:2、依次比较数组的前游标所指与temp的大小,如果temp>a[i],则i++,直到遇到第一个temp<a[i],则停止移动,将a[i]赋值给a[j]

五、算法运算步骤为:3、判断i是否等于j,如果不相等则循环1、2步,直到i等于j,则完成一次快速排序。

六、算法解释:这样一次循环做完后结果就是比temp小的尽量放在temp前,比temp大的尽量放在temp后。但是这种顺序不是稳定的,会有调整。因此快速排序不是一种稳定的排序。以下是实现程序。

七、一次排序完之后在分别对temp前的数组元素和temp后的数组元素分别进行快排,直到数组元素个数为1则停止。

参考技术B 字典序这个东东的来历用我们查阅字典的经验来解释一定是最合适不过了...谁也不想..在一个混乱编辑的字典里面查一个字..(- -不知道 有这样的字典么...)
这个...如果手边有英文字典的话会更好...英文字典是没有检字表的...总是可以按现在翻页面确定所要找的那个单词在前面还是后面......
不知道小时侯大家有没有在书的侧页写过名字和班级......写在那里的字会有一种朦胧的感觉...
如果您的字典够厚实的话...侧页也一定会有加深的标签...如果再厚一点的话...标签里可以写下A,B,C,D..如果更厚重一点的书...(我唯一见
过的一本是...某超级化学手册..第78版..)会在侧页的位置压出标签...
(...记得中考的时候...政治历史开卷...家人曾经在每本课本的章节的位置贴上商店里用作价格标签的小纸条...嘿嘿...)
对于类似字典这样需要经常进行检索的东西...字典序的发明是很自然的...
人们为了可以找到单词所在的位置...需要可以通过它的第一个字母就迅速确定它在书哪一块...再根据第二个字母...再缩小这个范围..
(其实我们不一定会用上每一个字母...只要限制的范围很小就很好...)
这样..一个英文单词可以算是一个字符串...(很多情况下我们可以直接对字符串进行比较....这个时候用到的就是字典序了..)
汉语字典还是不太一样的额...通常里头会有两种检字表...前面是拼音..后面用的是部首...后面这个还比较麻烦..得学上一阵子...虽然有时
候我们也不得不用它...

数字也可以作为特别的字符串...这种情况下...如果我们用字典序进行比较...就有可能会出现下面这种情况...
"100">"1000"..(加引号的目的是为了区别数字..与数字串..)
这个好象没道理的样子.."1000"怎么比"100"还要小一些呢...
事实上呢.在计算机里...我们会这么看..和之前一样...我们会首先比较第一个字符...
这里"1"='1'..(已经可以看到区别了..在数中..数字因为位置的不同会有不同的意义..而这里.这种分别变的不一样了...)
..一步比较...还没有办法分辨出它们的大小...只好再比较之后的数...
这种情况回直到最后一次尝试...第一个字符串已经空掉之前...
如果硬要比较的话...
空格的ascii码值是32.(我觉得Ascii码还是用两位十六进制表示比较合适拉...咳咳..
书上告诉我..要在十六进制前加"0x"..注意是零艾克丝..不是呕哎克丝..额..虽然我也不知道是为啥.而且不得不承认这个还真不好用眼睛区
分.#24..0x20)..
当然这里还不是空格...
真正意义上的虚无.. "" 的ascii码值是0x00...
而数字0是0x30..

我们是不是应该给字典序...一个准确的数学描述呐- -...
(这个...我觉得是不是像S1<S2当前仅当什么什么什么...这样字典序的小于就有了...大于是对称的...应该可以不描述...再叙述一下等于就好
拉?..我觉得在这里...它好象没什么帮助的样子..不如用程序语言或者自然语言描述好...)

恩...这样看来...排列中出现的顺序并不是完全典型的字典序..如果把它看做字符串..它的长度是固定的...并且每一个位置的元素总是取于
前面的一些数字...

好好理解理解.......
参考技术C #include <stdio.h>
#include <string.h>
main()

char a[5][10],t[10];
int i,j;
for(i=0;i<5;i++)

printf("请输入第%d个同学名字:",i+1);
gets(a[i]);

for(i=1;i<5;i++)
for(j=0;j<5-i;j++)
if(strcmp(a[j],a[j+1])<0)

strcpy(t,a[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],t);

for(i=0;i<5;i++)
puts(a[i]);
参考技术D 先小写后大写

带有名称和描述 numberOfRowsInSection 问题的按字母顺序排列的 plist

【中文标题】带有名称和描述 numberOfRowsInSection 问题的按字母顺序排列的 plist【英文标题】:Alphabetical plist with name and description numberOfRowsInSection issues 【发布时间】:2014-05-28 16:36:21 【问题描述】:

所以,我有一个描述多种美食的 plist。在我的 plist 中,我有 26 个数组,每个数组都有一个字母键。在这些数组中,包含多个美食,它们是字典。在每个字典中有 2 个字符串,一个是菜的名称,另一个是菜的描述。我非常接近在表格视图控制器中实现这一点,但我遇到了一些问题。主要问题是访问名称并将其放入一个数组中,以便可以使用它来判断每个部分中有多少行,该部分是字母表中的每个字母。我不断收到错误消息:"-[_NSArrayI length]: unrecognized selector sent to instance...

非常感谢您的帮助。谢谢

这就是我所拥有的:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

        if (tableView.tag == 1)
            NSString *key = keys[section]; //returns the key(letter) for the section
            NSDictionary *content = cuisines[key]; //returns the dictionary that consists of name and description
            NSString *name = [content valueForKey:@"name"];
            NSMutableArray *keyValues = [@[] mutableCopy];
            [keyValues addObject:name];
            return [keyValues count];
        else
            return [filteredcuisines count];
        


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

    if (tableView.tag == 1) 
        return [keys count]; //Return the amount of letters for the number of sections
    else
        return 1;
    

还有一张我的字典的图片: http://imageshack.com/a/img835/9567/kkv7.png

这是我的搜索条形码。我需要合并我对 plist 所做的更改。

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
    [filteredcuisines removeAllObjects];
    if (searchString.length>0) 
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@", self.searchBar.text];
        for (NSString *key in keys) 
            NSArray *matches = [cuisines[key] filteredArrayUsingPredicate:predicate];
            [filteredcuisines addObjectsFromArray:matches];
        
    
    return YES;

【问题讨论】:

filtered cuisines 是用户键入要搜索的内容时搜索栏的过滤后的美食字典 您的钥匙和美食中有什么。它们都是数组吗? 哦,对不起,美食是包含一切的字典。 keys 是一个由字母 A-Z 组成的数组。每个字母都是一个数组,可以容纳多个字典,每个字典都可以代表一种美食。每个字典美食都有一个名称和描述。 你能发布 numberOfSections 方法吗? 另外,如果 tableView.tag==1,你似乎总是返回 1。总是 keyValues 将有一个对象。如果是这样,为什么需要所有这些操作? 【参考方案1】:

看起来你从美食[key] 获得的“内容”应该是一个数组,而不是字典。也不清楚你想用 keyValues 数组做什么。我认为您的方法可以简化为这样,

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

        if (tableView.tag == 1)
            NSString *key = keys[section]; 
            NSArray *content = cuisines[key];  
            return content.count;
        else
            return [filteredcuisines count];
        

我假设您通过在字典上调用 allKeys 来获取键,然后按字母顺序对其进行排序。如果是这样,那么您可以在 cellForRowAtIndexPath 中获取表格视图的名称,

    NSArray *arrayForSingleLetter = self.cuisines[keys[indexPath.section]];
    cell.textLabel.text = arrayForSingleLetter[indexPath.row][@"name"];

过滤你的数组必须修改成这样,

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
    [filteredcuisines removeAllObjects];
    if (searchString.length>0) 

        NSArray *arrayForSingleLetter = self.cuisines[[searchString substringToIndex:1]];
        NSIndexSet *indxs = [arrayForSingleLetter indexesOfObjectsPassingTest:^BOOL(NSDictionary *dict, NSUInteger idx, BOOL *stop) 
            return [dict[@"name"] rangeOfString:searchString].location != NSNotFound;
        ];

        [indxs enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) 
            [filteredcuisines addObject:arrayForSingleLetter[idx][@"name"]];
        ];
    
    return YES;

【讨论】:

这确实有效,它不允许我访问名称并将它们放在表格视图中。如何设置文本,如: cell.textLabel.text = content[indexPath.row];不起作用。这是在我的 cellForRowAtIndexPath 方法中 @leeferfeefer,这当然行不通,您必须使用 indexPath.section 获取各个部分,然后使用 indexPath.row 获取数组中的各个字典,最后使用 objectForKey: @"name" 获取名称。我已经更新了我的答案,向您展示如何做到这一点。 非常感谢。这是有道理的。我没有正确地接近这个 如何正确使用搜索栏。我已经编辑了我上面的问题。这是我在更新我的 plist 以获得描述之前所拥有的。 @leeferfeefer,这取决于您要执行的搜索类型。你想只搜索美食的名称吗?

以上是关于C语言中说的按字典顺序是啥意思???的主要内容,如果未能解决你的问题,请参考以下文章

C语言中的序列点是啥意思

c语言中,malloc和free是啥意思?

C语言中字符串排序的原理是啥

C语言里的按位异或运算符

C语言中float是啥意思

c语言 对字符串排列顺序是啥意思 麻烦大家看清楚问题回答