c语言,输入五个国家的名字,按字母顺序(即按ASCII码从小到大的顺序)排列输出。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言,输入五个国家的名字,按字母顺序(即按ASCII码从小到大的顺序)排列输出。相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<conio.h>
#include<string.h>

typedef struct

char cou[15];
C;

void main()

/*定义结构数组*/
C p[5];
/*定义指针指向结构体变量*/
C* q=p;
int i,j,temp;
printf("input countries:\n");
/*循环输入国家名并存储在结构数组中*/
for(i=0;i<5;i++)

scanf("%s",&p[i].cou);
/* strupr(p[i].cou);*/

/*冒泡排序将国家名称排序*/
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)

/*strcmp函数比较相邻两个国家名的Ascii码*/
if(strcmp(p[j].cou,p[j+1].cou)>0)

temp=*q[j].cou;
*q[j].cou=*q[j+1].cou;
*q[j+1].cou=temp;



printf("\n");
/*循环输出*/
for(i=0;i<5;i++)
printf("%s ",p[i].cou);

getch();


这个程序不能进行排序,还只是顺序输出,也没有提示错误,编译器Win-Tc。请问我这个哪里写的有问题?
if(strcmp(p[j].cou,p[j+1].cou)>0)

temp=*q[j].cou;
*q[j].cou=*q[j+1].cou;
*q[j+1].cou=temp;

这个地方有问题,指针间可以进行赋值,那我这样写为什么没有执行?
这里涉及到的交换只能用strcpy()函数么?

typedef struct

char cou[15];
C;
C raw[5];
C *p[5];

void main()

/*定义结构数组*/
/*定义指针指向结构体变量*/
C* q;
int i,j;
printf("input countries:\n");
/*循环输入国家名并存储在结构数组中*/
for(i=0;i<5;i++)

scanf("%s",&raw[i].cou);
p[i]=&raw[i];
/* strupr(p[i].cou);*/

/*冒泡排序将国家名称排序*/
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)

/*strcmp函数比较相邻两个国家名的Ascii码*/
if(strcmp(p[j]->cou,p[j+1]->cou)>0)

q=p[j];
p[j]=p[j+1];
p[j+1]=q;



printf("\n");
/*循环输出*/
for(i=0;i<5;i++)
printf("%s ",p[i].->cou);

getch();

想用指针的话利用指针数组排序就行了,
另外上面的比较的是p却对q进行了交换
字符串拷贝只能用strcpy了
参考技术A #include<stdio.h>
#include<conio.h>
#include<string.h>

typedef struct

char cou[15];
C;

void main()

/*定义结构数组*/
C p[5];
/*定义指针指向结构体变量*/
C* q=p;
int i,j,temp;
printf("input countries:\n");
/*循环输入国家名并存储在结构数组中*/
for(i=0;i<5;i++)

scanf("%s",p[i].cou);
/* strupr(p[i].cou);*/

/*冒泡排序将国家名称排序*/
for(i=0;i<5;i++)
for(j=0;j<4-i;j++)

/*strcmp函数比较相邻两个国家名的Ascii码*/
if(strcmp(p[j].cou,p[j+1].cou)>0)

strcpy(temp,p[j].cou);
strcpy(p[j].cou,p[j+1].cou);
strcpy(p[j+1].cou,temp);



printf("\n");
/*循环输出*/
for(i=0;i<5;i++)
printf("%s ",p[i].cou);

getch();

UITableview 的名称部分按排序顺序排列

【中文标题】UITableview 的名称部分按排序顺序排列【英文标题】:UITableview with sections for Names in sorted order 【发布时间】:2012-01-09 11:27:03 【问题描述】:

我知道如何使用 UITableview 委托和数据源协议方法。所以,我可以处理部分。现在我想使用单个查询从数据库中获取所有记录,即从联系人中选择名字,姓氏,按名字 asc 排序。 (现在我使用 26 个单独的查询,我知道这不是正确的解决方案)

现在我想根据部分的字母对联系人进行分组。如果没有以字母 S 开头的联系人。则不应出现 S 部分。你能给我正确的代码或任何教程吗?谢谢

能否请您重新修改此脚本?

-(void)read_data_fromDB objectsForCharacters = [[NSMutableDictionary alloc]init];

sqlite3 *db = [eikardAppDelegate getNewDBConnection];
arr_sectionTitles = [[NSMutableArray  alloc] init];
for(char c='A';c<='Z';c++)

    NSMutableString *query = nil;

    query = [NSMutableString stringWithFormat:@"select first_name, middle_name, last_name from phonebook  where first_name like '%c%%';",c];  


    const char *sql = [query UTF8String];
    sqlite3_stmt *selectAllStmt = nil;

    if(sqlite3_prepare_v2(db,sql, -1, &selectAllStmt, NULL)!= SQLITE_OK)
        NSAssert1(0,@"error preparing statement",sqlite3_errmsg(db));
    else
    
        NSMutableArray *arr_persons = [[NSMutableArray alloc] init];
        while(sqlite3_step(selectAllStmt)==SQLITE_ROW)
        
            //NSLog(@"Firstname : %@",query);
            PersonInfo *person =[[PersonInfo alloc] init];

            char *chrstr =(char *)sqlite3_column_text(selectAllStmt, 0);
            if(chrstr !=NULL)
            
                person.str_firstName = [NSString stringWithUTF8String:chrstr];
                NSLog(@"Firstname : %@",person.str_firstName);
                   
            chrstr =(char *)sqlite3_column_text(selectAllStmt, 1);
            if(chrstr !=NULL)
            

                person.str_middleName = [NSString stringWithUTF8String:chrstr];
                NSLog(@"Middlename : %@",[NSString stringWithUTF8String:chrstr]);
            
            chrstr =(char *)sqlite3_column_text(selectAllStmt, 2);
            if(chrstr !=NULL)
            
                person.str_lastName = [NSString stringWithUTF8String:chrstr];
                NSLog(@"Lastname : %@",person.str_lastName);
                           


            [arr_persons addObject:person];

            [person release];
        
        if([arr_persons count]>0)
        
            NSString *keyValue = [NSString stringWithFormat:@"%c",c];
            [objectsForCharacters setObject:arr_persons forKey:keyValue];
            [arr_sectionTitles addObject:keyValue];

        
        //[arr_persons release];

    
    sqlite3_finalize(selectAllStmt);

sqlite3_close(db); 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 


    return [arr_sectionTitles count];



// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    NSString *secTitle = [arr_sectionTitles objectAtIndex:section];

    return [[objectsForCharacters objectForKey:secTitle] count];

【问题讨论】:

你试过 NSPredicator 吗? 我不知道如何使用 NSPredicate 和 sqlite 查询。你能给我一个样品吗? 您可以从 sqlite 中检索所有数据,然后在获取数组后,您应该对其执行 NSPredicate。 你在使用核心数据吗? @KAREEMMAHAMMED 你能给我举个例子吗? 【参考方案1】:

这取决于数据的来源。如果您使用的是 NSFetchedResultsController,那么您可以使用 initWithFetcRequest:managedObjectContext:sectionNameKeyPath:cacheName: 和 sectionNameKeyPath: 属性的键名。您将多节排序结果。

如果您有来自查询的结果数据(对于整个选择,而不仅仅是 26 个字符中的一个),那么您最好将数据重新排列在有序的数组数组中。也就是说,主数组的每个元素都是索引中每个字母的结果数组。

如果您使用 [[UILocalizedIndexedCollat​​ion currentCollat​​ion] sectionIndexTitles] 作为部分的标题,则很容易为表实现索引。您不必为每个索引创建一个部分,您将在方法 tableView:sectionForSectionIndexTitle:atIndex: 中为每个索引引用正确的部分:

【讨论】:

以上是关于c语言,输入五个国家的名字,按字母顺序(即按ASCII码从小到大的顺序)排列输出。的主要内容,如果未能解决你的问题,请参考以下文章

sql 查询员工的名字,按字母顺序输出

C语言编程题:输入五个整数,再按相反顺序输出的程序? 谢谢

C语言制作通讯录怎么将联系人的名字按26个字母的顺序排序

c语言题。 按顺序打印输出26个英文字母,

c语言姓名首字母排序问题

C语言 各位大佬帮帮忙