求字符串数据排序

kjeny2002 2006-12-03 05:00:07
char* strs[100];
strs[0] = "Made";
strs[1] = "in";
strs[2] = "China";

我想要得到的排序是根据字串长度来排序

即结果是
strs[0] = "China";
strs[1] = "Made";
strs[2] = "in";
...全文
430 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
listart 2006-12-05
  • 打赏
  • 举报
回复
更正:long cstr(1);
listart 2006-12-05
  • 打赏
  • 举报
回复
关于字符串分割函数在c/c++下超级简单
遍历每个字符,判断如果是分割符就替换成'\0',同时记录下替换的次数就是分割后的字符串个数了
char *pstr;
char splitcharset[] = "|-"; //分割字符集
...
char *pch = pstr;
long cstr(0);
while (*pch){
if (strchr(splitcharset, *pch)){
*pch = '\0';
cstr++;
}
}
listart 2006-12-05
  • 打赏
  • 举报
回复
re:
listart(开始) ( ) 信誉:100 Blog 2006-12-3 22:56:01 得分: 0

好像离题了,楼主题目显然是普通的字符串大小进行比较,不是按长度什么的
===========================================
不明白了,难道不是楼主自己说的“我想要得到的排序是根据字串长度来排序”吗?

果然是我离题了,不过答案还是一样的,不过改写下strcmp(str1,str2)
排序万变不离其中,不同场合使用不同的排序算法或者组合不同的算法(一般情况下)
不管什么算法,不管按照什么排序,只要有一个比较函数能够得出2个元素的比较值即可。
建议使用STL中的排序相关部分
kjeny2002 2006-12-04
  • 打赏
  • 举报
回复
楼上说得不错。不过我现在还想要一个字符串分割函数。

要类似
char *strtok(char *s, const char *delim);

char *strtok_r(char *s, const char *delim, char **ptrptr);
的功能

int *split(const char *s,const char *delim,char **ptrptr);
晨星 2006-12-04
  • 打赏
  • 举报
回复
listart(开始) ( ) 信誉:100 Blog 2006-12-3 22:56:01 得分: 0

好像离题了,楼主题目显然是普通的字符串大小进行比较,不是按长度什么的
===========================================
不明白了,难道不是楼主自己说的“我想要得到的排序是根据字串长度来排序”吗?
晨星 2006-12-04
  • 打赏
  • 举报
回复
To:fcunui_wzf()
strupr是C语言的标准库函数吗?偶怎么在C99中找不到啊?
listart 2006-12-03
  • 打赏
  • 举报
回复
好像离题了,楼主题目显然是普通的字符串大小进行比较,不是按长度什么的
其实按普通排序做就可以了
快速,冒泡,随便选个排序算法都可以
不过就是比较函数改成strcmp(str1,str2)即可
注:数组用字符串数组表示。
kjeny2002 2006-12-03
  • 打赏
  • 举报
回复
split
todototry 2006-12-03
  • 打赏
  • 举报
回复
mark
kjeny2002 2006-12-03
  • 打赏
  • 举报
回复
谁有字串分割函数
VCLIFE 2006-12-03
  • 打赏
  • 举报
回复
string.length()比较大小
fcunui_wzf 2006-12-03
  • 打赏
  • 举报
回复
函数名: strupr
功 能: 将串中的小写字母转换为大写字母
用 法: char *strupr(char *str);
程序例:

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

int main(void)
{
char *string = "abcdefghijklmnopqrstuvwxyz", *ptr;

/* converts string to upper case characters */
ptr = strupr(string);
printf("%s\n", ptr);
return 0;
}

C中的标准函数
晨星 2006-12-03
  • 打赏
  • 举报
回复
小写转大写,可以调用_strupr函数,不过这并不是个C语言的标准库函数,但VC中是有的。
#include <stdlib.h>

如果实在不愿意调用非标准设施,自己写一个简单的只针对ASCII字符的就是了,比如:
void string_upper(char* s) {
while(*s) {
if(islower(*s))
*s = toupper(*s);
s++;
}
}
不过不要使用这个函数来作用于你原来程序中的那些常量字符串,常量字符串是不能被修改的。
晨星 2006-12-03
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int compare(const void *v1, const void *v2);

int main() {
char* strs[] = {"Made", "in", "China"};
int count = sizeof(strs) / sizeof(*strs);
int i;

qsort(strs, count, sizeof(*strs), compare);
for(i = 0; i < count; i++) {
printf("%s\n", strs[i]);
}

return 0;
}

int compare(const void *v1, const void *v2) {
const char* s1 = *(const char**)v1;
const char* s2 = *(const char**)v2;
return (int)(strlen(s2) - strlen(s1));
}
kjeny2002 2006-12-03
  • 打赏
  • 举报
回复
另外。怎么把字符串小写变成大写
如China ---> CHINA
kjeny2002 2006-12-03
  • 打赏
  • 举报
回复
有代码不
todototry 2006-12-03
  • 打赏
  • 举报
回复
可以把长度存在一个数组里排序

69,377

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧