gpt4 book ai didi

c - 对字符串进行排序,忽略大小写;相等的字符串首先大写

转载 作者:行者123 更新时间:2023-12-03 00:10:44 27 4
gpt4 key购买 nike

我写了这样一段代码:

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

int compare_str(const void* a, const void* b)
{
char * const * aa=a;
char * const * bb=b;
return strcasecmp(*aa, *bb);
}

int sort_alphabetically(char tab[])
{
if(strlen(tab)<1 || tab[strlen(tab)-1]=='\n')
{
return 1;
}
for(unsigned int i=0; i<strlen(tab); i++)
{
if(tab[i]=='-')
{
return 1;
}
}
int spaces_count=0;
int first=0;
int ch=0;
for(unsigned int i=1; i<strlen(tab); i++)
{
if(tab[i]!=' ')
first=1;
if(tab[0]==' ' && tab[1]==' ')
ch=1;
if(tab[i]==' ' && tab[i+1]>=33 && tab[i+1]<=126 && first==1)
spaces_count++;
}
int words_count=spaces_count+1;
char **words=malloc(words_count * sizeof(char*));
char *pch;
int word_idx=0;
pch=strtok(tab, " ");
while(pch!=NULL)
{
words[word_idx++]=strdup(pch);
pch=strtok(NULL, " ");
}
qsort(words, words_count, sizeof(char*), compare_str);
for(int i=0; i<words_count; i++)
{
for(unsigned int j=0; j<strlen(words[i]); j++)
{
if(ch==0)
*(tab++)=words[i][j];
else
if(words[i][j]!=' ')
{
*(tab++)=words[i][j];
ch=0;
}
}
if(i!=words_count-1)
*(tab++)=' ';
else
*(tab++)='\0';
free(words[i]);
}
free(words);
for(unsigned int i=0; i<strlen(tab); i++)
if(tab[i]==' ' && tab[i+1]==' ')
tab[i]='\0';
return 0;
}

int main()
{
char input[1000];
printf("Enter text: ");
if(fgets(input, 1000, stdin))
{
if(input[strlen(input)-1]=='\n')
input[strlen(input)-1]='\0';
if(sort_alphabetically(input))
{
fprintf(stderr, "Incorrect input data");
return 2;
}
else
printf("%s", input);
}
return 0;
}

它按字母顺序对用户输入的单词进行排序。问题是它可以完成工作,但我也希望它检查单词是否相同。如果它们是第一个大写字母的单词,则应保留在第一个小写字母的单词之前。例如:

输入文字:

科技正在教会我们如何做人

输出应该是:

再次西蒙做人IS is向我们主要教导技术

但事实是:

再次西蒙做人IS IS向我们主要教授技术

我应该做出哪些改变?

最佳答案

为了实现你想要的,你必须稍微改变你的比较函数。正如您所观察到的,strcasecmp() 将使两个相等单词的顺序不确定。因此,如果 strcasecmp() 认为两个单词相等(不区分大小写),则必须区分大小写地比较它们(使用适当的函数,您将猜测是哪个;)并返回结果。否则,仅返回 strcasecmp() 的结果。

关于c - 对字符串进行排序,忽略大小写;相等的字符串首先大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54716690/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com