| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 770 人关注过本帖
标题:写了个程序,好像不行,特别是回文
只看楼主 加入收藏
李猛
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-2-18
结帖率:33.33%
收藏
已结贴  问题点数:20 回复次数:9 
写了个程序,好像不行,特别是回文
   设有若干个字符串,这些字符串存储位置的首地址保存在指针数组中(即字符串用指向字符的指针变量表示)。
实现要求:
   ⑴ 实现字符串的输入和输出;
   ⑵ 对所有的字符串按从小到大的顺序排序,即指针数组中的第一个元素指向最小的字符串,第二个元素指向次小的字符串…,依次类推;
   ⑶ 判断这些字符串中是否有“回文”,所谓“回文”指的是顺读和倒读都是一样的字符串;
⑷ 设计一个菜单,具有上述规定的操作要求、退出系统等

#include <stdio.h>
#include <string.h>
int huiwen(const char* pstr[5]);
void menue();
int input(char *q[5]);
void sort(char *str[5]);
#define n 5
int main()
{
    int i,num,b,g;
    char a[n][10];
    char *p[n];
    for (i=0;i<n;i++)
    {
        p[i]=a[i];
    }
    for (g=1;g!=0;)
    {
        menue();
        scanf("%d",&num);
        switch(num)
        {
        case 1:
            b=input(p);
            break;
        case 2:
            sort(p);
            break;
        case 3:
            huiwen(p);
            if (!huiwen(p[i])) puts(p[i]);
        break;
            break;
        case '4':
            getchar();
            g = 0;
            printf("感谢使用!!\n");
            break;
        default:
            getchar();
            printf("输入错误,请重新输入\n");
            printf("\n");
            printf("\n");
        }
    }
   
}
void menue()
{
    printf("*******欢迎使用********");
    printf("===============================================================================\n");
    printf("                  1.输入与输出   (每个字符串不超过100个字符,最多5个字符串) \n");
    printf("                  2.从小到大排序\n");
    printf("                  3.判断是否有回文\n");
    printf("                  4.关闭程序\n");
    printf("===============================================================================\n");
    printf("\n");
    printf("   请输入你需要的操作 : ");
}

int input(char *q[])
{
    int s,z,x,c,m,b;
    static int j=0;
    printf("\n");
    printf("     1.输入\n");
    printf("     2.修改\n");
    printf("     3.输出\n\n");
    printf("     4.返回主菜单\n");
    scanf("%d",&s);
    switch(s)
    {
    case 1:
        printf("输入串数");
        scanf("%d",&z);
        if(z>5)
        {
            printf("输入数大于可输入串数");
        }
        for (c=0;c<=z-1;c++)
        {
            printf("输入的第%d串数是",j+1);
            scanf("%s",q[c]);
            j++;
            if((j+z)>5)
            {
                printf("输入的串数大于可输入的串数");
            }
        }
        break;
    case 2:
        printf("输入你所想修改的串数");
        scanf("%d",&x);
        printf("请输入修改内容: ");
        scanf("%s",q[x-1]);
        printf("\n修改成功!\n\n\n");
        getchar();
        break;
    case 3:
        getchar();
        for(c=0;m<j;c++){
            printf("第%d个字符串是: %s\n",c+1,q[c]);
        }
        break;
    case 4:
        getchar();
        break;
    default:
        printf("输入错误\n\n\n\n");
    }
    return b;
}
void sort(char *str[n])
{
    int i,j;
    char *t;
    for (i=0;i<n-1;i++)
    {
        for (j=1;j<n;j++)
        {
            if(strcmp(str[i],str[j])>0)
            {
                t = str[i];
                str[i] = str[j];
                str[j] = t;
            }
        }
    }
    printf("已排好序");
    for(i=0;i<n;i++)
    {
        printf("%s",str[i]);
    }
}
int huiwen( char* pstr)
{
    int i,j;
    for (j=0;j<5;j++)
    {
        int len = strlen(pstr[i]);
        for (i = 0; i < len / 2; i++)
        {
            if (pstr[i] != pstr[len - 1 - i])   
            {
                return 1;
            }
        }
    }
        return 0;
}
搜索更多相关主题的帖子: include 字符串 元素 
2014-02-18 21:41
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
认真看书学习
2014-02-19 07:59
李猛
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-2-18
收藏
得分:0 
为什么会出现烫……………烫的?怎么解决?
2014-02-19 08:14
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
以下是引用李猛在2014-2-19 08:14:14的发言:

为什么会出现烫……………烫的?怎么解决?

字符串指针非法或越界

DO IT YOURSELF !
2014-02-19 09:56
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:5 
死循环?
        for(c=0;m<j;c++){
            printf("第%d个字符串是: %s\n",c+1,q[c]);
        }

总有那身价贱的人给作业贴回复完整的代码
2014-02-19 10:45
yctchxf
Rank: 6Rank: 6
来 自:盐城
等 级:侠之大者
威 望:2
帖 子:176
专家分:454
注 册:2012-4-10
收藏
得分:0 
很久没来过了
2014-02-19 12:29
逆风而前
Rank: 7Rank: 7Rank: 7
来 自:福建
等 级:黑侠
威 望:7
帖 子:193
专家分:567
注 册:2013-2-14
收藏
得分:5 
#include <stdio.h>
#include <string.h>
int huiwen(char* pstr);
void menue();
int input(char *q[5]);
void sort(char *str[],int b);
#define n 5
int main()
{
    int i,num,b,g;
    char a[n][10];
    char *p[n];
    for (i=0;i<n;i++)
    {
        p[i]=a[i];
    }
    for (g=1;g!=0;)
    {
        menue();
        scanf("%d",&num);
        switch(num)
        {
        case 1:
            b=input(p);
            break;
        case 2:
            sort(p,b);
            break;
        case 3:
      //      huiwen(p);
            if (!huiwen(p[i])) puts(p[i]);
        break;
            break;
        case '4':
            getchar();
            g = 0;
            printf("感谢使用!!\n");
            break;
        default:
            getchar();
            printf("输入错误,请重新输入\n");
            printf("\n");
            printf("\n");
        }
    }
  return 1;  
}
void menue()
{
    printf("*******欢迎使用********");
    printf("===============================================================================\n");
    printf("                  1.输入与输出   (每个字符串不超过100个字符,最多5个字符串) \n");
    printf("                  2.从小到大排序\n");
    printf("                  3.判断是否有回文\n");
    printf("                  4.关闭程序\n");
    printf("===============================================================================\n");
    printf("\n");
    printf("   请输入你需要的操作 : ");
}

int input(char *q[])
{
    int s,z,x,c,m,b;
    static int j=0;
    printf("\n");
    printf("     1.输入\n");
    printf("     2.修改\n");
    printf("     3.输出\n\n");
    printf("     4.返回主菜单\n");
    scanf("%d",&s);
    switch(s)
    {
    case 1:
        printf("输入串数");
        scanf("%d",&z);
        if(z>5)
        {
            printf("输入数大于可输入串数");
        }
        for (c=0;c<=z-1;c++)
        {
            printf("输入的第%d串数是",j+1);
            scanf("%s",q[c]);
            j++;
            if((j+z)>5)
            {
                printf("输入的串数大于可输入的串数");
            }
        }
        break;
    case 2:
        printf("输入你所想修改的串数");
        scanf("%d",&x);
        printf("请输入修改内容: ");
        scanf("%s",q[x-1]);
        printf("\n修改成功!\n\n\n");
        getchar();
        break;
    case 3:
        getchar();
        for(c=0;c<j;c++)
        {
            printf("第%d个字符串是: %s\n",c+1,q[c]);
        }
        break;
    case 4:
        getchar();
        break;
    default:
        printf("输入错误\n\n\n\n");
    }
    return j;
}
void sort(char *str[],int b)
{
    int i,j;
    char t[10];
    for (i=0;i<b;i++)
    {
        for (j=i;j<b-1;j++)
        {
            if(strcmp(str[j],str[j+1])>0)
            {
                strcpy(t,str[j]);
                strcpy(str[j],str[j+1]);
                strcpy(str[j+1],t);
            }
        }
    }
    printf("已排好序");
    for(i=0;i<b;i++)
    {
        printf("%s\n",str[i]);
    }
}
int huiwen( char* pstr)
{
    int i,j;
    for (j=0;j<5;j++)
    {
        int len = strlen(pstr);
        for (i = 0; i < len / 2; i++)
        {
            if (pstr[i] != pstr[len-1-i])   
            {
                return 1;
            }
        }
    }
        return 0;
}
回文没有改好,排序改了一下。你自己在修改一下。
2014-02-19 22:58
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
收藏
得分:5 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int o=0;
void menue()
{
  printf("*******welcome!!********");
  printf("===============================================================================\n");
  printf("                  1:input the strings \n");
  printf("                  2:sort the strings from the smallest to biggest\n");
  printf("                  3:Judge whether have huiwen strings\n");
  printf("                  4:close this program\n");
  printf("===============================================================================\n");
  printf("\n");
  printf(" please input the operator you want  : ");
}
int input(const int n,char *str[])
{
  int i;
  printf("please input the strings \n");
  for(i=0;i<n;++i)
   {
      printf("zhe shi di %d ge zi fu chuan          ",i);
      scanf("%s",str[i]);
   }
   printf(" you have inputed %d strings, do the next you want \n", i);
    return 0;
}
int sort(const int n,char *str[])
{
  int i,j;
  char *t;
  if(o==0)
  printf("You have not inputed any strings \n");
  else
 {
  for(i=0;i<n-1;++i)
    for(j=1;j<n;++j)
      {
        if(strcmp(str[i],str[j])>0)
          {
            t=str[i];
            str[i]=str[j];
            str[j]=t;
          }
      }
     printf(" the strings are sorted in the order, and they are \n");
    return 0;
}
int sort(const int n,char *str[])
{
  int i,j;
  char *t;
  if(o==0)
  printf("You have not inputed any strings \n");
  else
 {
  for(i=0;i<n-1;++i)
    for(j=1;j<n;++j)
      {
        if(strcmp(str[i],str[j])>0)
          {
            t=str[i];
            str[i]=str[j];
            str[j]=t;
          }
      }
     printf(" the strings are sorted in the order, and they are \n");
   for(i=0;i<n;++i)
    {
       puts(str[i]);
       printf("\n");
    }

  }
 return 0;
}
int  huiwen(const int n,char *str[])
{
   int i,t=1,num=0;
   if(o==0)
   printf("You have not inputed any strings \n");
   else
  {
   for(i=0;i<n;++i)
   {
     size_t len=strlen(str[i]);
      size_t j=0;
      for(j=0;j<len/2;++j)
      {if(str[i][j]!=str[i][len-j-1])
        t=0;
      }
if(t==1)
      {printf("%s is hui wen string\n",str[i]);
       num++;
      }
      t=1;
   }
   if(num==0)
   printf("there are no huiwen string inside \n");
  }
  return 0;
}
int main(void)
{
   int num,op,g;
   printf("how many strings you want to input \n");
   scanf("%d",&num);
   const int Num=num;
   char *str[Num];
   char p[Num][100000];
   for(g=0;g<Num;++g)
   {
     str[g]=p[g];
   }
   menue();
 while(1)
 {
   scanf("%d",&op);
    switch(op)
  {
     case 1:
     input(Num,str);
     o++;
     break;
     case 2:
     sort(Num,str);
     break;
     case 3:
     huiwen(Num,str);
     break;
     case 4:
     exit(0);
     break;
     default:
     printf("you input wrong opeartor \n");
     break;
   }
 }
  return 0;
}
界面什么的你自己在弄一下,我写的基本满足你的要求。

想抽苏烟了。
2014-02-20 00:44
zaqzaq01
Rank: 1
等 级:新手上路
帖 子:3
专家分:4
注 册:2014-2-21
收藏
得分:0 
寻找网络技术高手日站,一般技术拿不下,大牛加Q1934001040。骗子 收定金者请绕道.
2014-02-21 17:21
zaqzaq01
Rank: 1
等 级:新手上路
帖 子:3
专家分:4
注 册:2014-2-21
收藏
得分:0 
回复 7楼 逆风而前
寻找网络技术高手日站,一般技术拿不下,大牛加Q1934001040。骗子 收定金者请绕道.
2014-02-21 17:31
快速回复:写了个程序,好像不行,特别是回文
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017077 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved