Здесь - мой код.Предполагается сортировать слова в массиве по алфавиту независимо от их заглавных букв.Lowyrazy
- таблица всех слов в нижнем регистре, wyrazy
- таблица всех слов, найденных в исходном тексте, без изменений.Если вы замените оба экземпляра lowyrazy
на wyrazy
в строке 79, код будет работать отлично, но если вы сохраните его таким, какой он есть, strcmp
всегда возвращает положительное значение, даже если это явно не должно.Что еще более любопытно, это даже тот случай, когда lowyrazy
в точности совпадает с wyrazy.
В целях тестирования попробуйте ввести:
- это компьютеры picasso picasso они выanswerspablo может выдавать только бесполезные
в консоль.Он не будет правильно отсортирован с lowyrazy
, но отлично работает с wyrazy.Может ли кто-нибудь, пожалуйста, помочь мне?
Edit- Код ниже
#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);
}
*