Here是我的代码。无论字母的大小写如何,都应该按字母顺序对数组中的单词进行排序。 Lowyrazy
是所有小写单词的表,wyrazy
是原始文本中未更改的所有单词的表。如果您在第79行中用lowyrazy
替换了wyrazy
的两个实例,则代码可以很好地工作,但是如果保持原样,strcmp
总是返回正数,即使不应该。更奇怪的是,甚至在lowyrazy
与wyrazy完全相同的情况下也是如此。
出于测试目的,请尝试输入:
您所回答的毕加索计算机是毕加索吗?
进入控制台。 lowyrazy
无法对其进行正确排序,但与wyrazy一起使用时效果最佳。有人可以帮我吗?
下面的编辑代码
#include <stdio.h>
#include <string.h>
int sort_alphabetically(char tab[])
{
int i=0, ib=1,n=0, m=0;
int len=strlen(tab);
int spacje[1000]={0}, nspacji=0;
if(tab[0]!=' ')
{
nspacji++;
spacje[0]=-1;
}
char wyrazy[1000][1000]={'\0'};
char lowyrazy[1000][1000]={'\0'};
char temp[1000];
if(len==0) return 1;
if(tab[strlen(tab)-1]=='\n') return 1;
while(tab[n]!='\0') //Szukanie niewłaściwych symboli
{
if(((tab[n]<'a'&&tab[n]>'Z')||tab[n]>'z'||tab[n]<'A')&&tab[n]!=' ')
{
return 1;
}
n++;
}
n=0;
while(n<len-1)
{ //Wyszukiwanie spacji
if(tab[n]==' '&&tab[n+1]!='\0'&&tab[n+1]!=' ')
{
spacje[nspacji]=n;
nspacji++;
}
n++;
}
int x;
while(m<nspacji) //Rozdzielanie wyrazów
{
x=0;
n=spacje[m]+1;
while(tab[n]!=' '&&tab[n]!='\0')
{
wyrazy[m][x]=tab[n];
lowyrazy[m][x]=tab[n];
if(lowyrazy[m][x]<'a')
{
printf("Test");
lowyrazy[m][x]+=32;
}
n++;
x++;
}
wyrazy[m][x]='\0';
lowyrazy[m][x]='\0'; //Wstawienie terminatora na końcu wyrazu
m++;
}
while(i<nspacji)
{
printf("\n%s %s\n",lowyrazy[i],wyrazy[i]);
i++;
}
i=0;
while(i<nspacji-1)
{
ib=i+1;
while(ib<nspacji)
{
if(strcmp(lowyrazy[i], lowyrazy[ib])>0)
{
printf("\n%s>%s\n",wyrazy[i],wyrazy[ib]);
strcpy(temp, wyrazy[ib]);
strcpy(wyrazy[ib], wyrazy[i]);
strcpy(wyrazy[i], temp);
}
ib++;
}
i++;
}
n=0;
while(tab[n]!='\0')
{
tab[n]='\0';
n++;
}
n=0;
while(n<nspacji)
{
strcat(tab,wyrazy[n]);
if(n<nspacji-1) tab[strlen(tab)]=' ';
n++;
}
return 0;
}
int main(void)
{
char tab[1001];
printf("Podaj wyrazy: ");
fgets(tab, 1001, stdin);
if(tab[strlen(tab)-1]=='\n') tab[strlen(tab)-1]='\0';
int n;
n=sort_alphabetically(tab);
if(n==1)
{
printf("Incorrect input data");
return 2;
}
printf("%s",tab);
}
*