Strcmp对于一个字符串正常工作,对于另一个相同的字符串总是返回正数

时间:2019-01-25 22:04:07

标签: c strcmp

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);
}

*

0 个答案:

没有答案