| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1236 人关注过本帖
标题:我正在自学,在这里卡死挂机了...有一些地方不懂,能不能解析一下,谢谢
只看楼主 加入收藏
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
顺便问一下,return 1是直接跳出所有循环还是只跳出当前的循环?

I have not failed completely
2012-10-21 09:44
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
我改了一些错误,可输出还是有点问题,下面是改过以后的程序:
           
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>

int main(void)
{
    char A[100];
    int i,PQ=0;
    bool OPQ=true;
    printf("请输入一段文字:\n");
    fgets(A,sizeof(A),stdin);
    for(i=0;i<strlen(A);i++)
    {
        if(isalnum(A[i])==0)
            A[i]=' ';
        else
        A[i]=tolower(A[i]);
    }
    while(true)
    {
         while(PQ<strlen(A))
         {
           if(A[PQ]==' ')
           {
               PQ++;
           continue;
           }
           if(A[PQ]!=A[i-PQ])
           {
              printf("\n这不是一个回语\n");
              OPQ=false;
              return 1;
           }PQ++;
       }
       if(OPQ==true)
       printf("\n这是一个回语\n");
       break;
    }
    return 0;
}

        请帮忙改一改,我也得快点结账了,不然都没分用了...

I have not failed completely
2012-10-21 11:30
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
我又改了一下,但是,你懂的....

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

int main(void)
{
    char A[100]={0};
    int i,PQ=0;
    bool OPQ=true;
    printf("请输入一段文字:\n");
    fgets(A,sizeof(A),stdin);
    for(i=0;i<(strlen(A));i++)
    {
        if(isalnum(A[i])==0)
            A[i]=' ';
        else
        A[i]=tolower(A[i]);
    }
         while(PQ<(strlen(A)))
         {
           if(A[PQ]==' ')
           {
               PQ++;
           continue;
           }
           if(A[PQ]!=A[i-PQ])
           {
              printf("\n这不是一个回文\n");
              OPQ=false;
              return 1;
           }PQ++;
         }
       if(OPQ==true)
       printf("\n这是一个回文\n");
    return 0;
}

        

I have not failed completely
2012-10-21 13:53
你的双手
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:28
专家分:101
注 册:2012-10-13
收藏
得分:20 
回复 11楼 神龙赖了
return 1; 直接结束了 main函数,说白了就是跳出了所有循环。
你这个代码肯定不对,我先给你个思路,随后给你代码。
一、要判定字符串A是否为回文,要先去掉所有的非数字和字母类型,所以先将A中的数字和字母转换成小写按顺序存储到字符串B中。
二、判定B中的字符是否为回文,比如字符串长度M=5 那么要判定的就是B[0]==B[4],B[1]==B[3],B[2]==B[2]。即对字符串中第i个字母而言,B[i]==B[M-1-i]。
三、只要出现一次不符合回文的条件,立刻将判定值值为否,然后跳出循环。
四、通过判定值的结果来输出判定结果。

双手 决定一切!
2012-10-21 15:37
你的双手
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:28
专家分:101
注 册:2012-10-13
收藏
得分:0 
代码来了,有注释你应该看得懂。
程序代码:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>

int main(void)
{
    char A[100] = {0};
    char B[100] = {0};//用于存放A中去掉符号之后的所有小写字母和数字
    int j = 0;//用于给B赋值
    int i;
    int PQ = 0;
    bool OPQ = true;
    printf("请输入一段文字:\n");
    fgets(A,sizeof(A),stdin);
    for(i=0; i<(strlen(A)); i++)
    {
        if( isalnum(A[i]) != 0)
        {
            B[j] = tolower(A[i]);//用B来存储A中的小写字符和数字
            j++;
        }
    }
    while(PQ < ( strlen(B) ))//判定B是否满足回文的条件
    {
        if( B[PQ] != B[ (strlen(B) - 1 ) - PQ])
        {
            OPQ = false;
            break;//跳出while循环
        }
        PQ++;
    }
    if(OPQ == true)
        printf("\n这是一个回文\n");
    else
        printf("\n这不是一个回文\n");
    return 0;
}


双手 决定一切!
2012-10-21 15:48
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
回复 15楼 你的双手
我明白了,谢谢,我做的那个程序虽然乱七八糟的,但我还是不明白我错在哪了?还请大虾再帮忙解析下。

I have not failed completely
2012-10-21 16:19
你的双手
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:28
专家分:101
注 册:2012-10-13
收藏
得分:0 
回复 16楼 神龙赖了
老夫已经尽力的解释了。
程序代码:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>

int main(void)
{
    char A[100]= {0};
    int i,PQ=0;
    bool OPQ=true;
    printf("请输入一段文字:\n");
    fgets(A,sizeof(A),stdin);
    for(i=0; i<(strlen(A)); i++)
    {
        if(isalnum(A[i])==0)//这里将所有非字母和数字的的字符置为空格了 ,比如i'm变成了i m
            A[i]=' ';
        else
            A[i]=tolower(A[i]);//把所有的字母都改成了小写
    }
    while(PQ<(strlen(A)))
    {
        if(A[PQ]==' ')//对所有的非空格字符进行判定
        {
            PQ++;
            continue;
        }
        if(A[PQ]!=A[i-PQ])
        /*错误!! 将第PQ个字符(该字符非空格),与第i-PQ个字符比较,
        但实际上因为之前的for循环已结束,所以此时的i的值为A的长度,即strlen(A)。
        若字符串长度为5的话,就是判定A[0]==A[5],但是A[5]是没有意义的。
        再者,之前修改成空格的字符也算在内的。所以这里的A[PQ]可能会与空格字符想比较。
        所以此方法无法判定字符串是否回文。
        */{
            printf("\n这不是一个回文\n");
            OPQ=false;
            return 1;//这里直接结束了整个main函数。相当于程序退出。
        }
        PQ++;
    }
    if(OPQ==true)
        printf("\n这是一个回文\n");
    return 0;

 

双手 决定一切!
2012-10-21 16:33
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
在下还有一个问题请教老夫,不知当讲不当讲...总之我先讲了啊
           如果把程序改成:
            #include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>

int main(void)
{
    char A[100]={0};
    int i,PQ=0,c,v;
    bool OPQ=true;
    printf("请输入一段文字:\n");
    fgets(A,sizeof(A),stdin);
    c=strlen(A);
    for(i=0;i<c;i++)
    {
        if(isalnum(A[i])==0)
            A[i]=' ';
        else
        A[i]=tolower(A[i]);
    }
    i-=i;
         while(PQ<c)
         {
           if(A[PQ]==' '||A[i-PQ]==' ')
           {
               PQ++;
           continue;
           }
           if(A[PQ]!=A[i-PQ])
           {
              printf("\n这不是一个回文\n");
              OPQ=false;
              return 1;
           }PQ++;
         }
       if(OPQ==true)
       printf("\n这是一个回文\n");
    return 0;
}
是不是就行了勒,还请老夫赐教....

I have not failed completely
2012-10-21 16:57
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
当然啦,老夫如果吃不消的话也可以不回答的。作为一个合法公民,你有权保持沉默....

I have not failed completely
2012-10-21 17:10
你的双手
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:28
专家分:101
注 册:2012-10-13
收藏
得分:0 
回复 18楼 神龙赖了
这样不行的,如果你要直接在字符串A中,进行判定 ,必须删除A中所有的非字母和数字的字符,而不是改成空格。
这里要强调的是:空格是有效字符的一种,而不是代表什么也没有。

[ 本帖最后由 你的双手 于 2012-10-21 18:16 编辑 ]

双手 决定一切!
2012-10-21 17:52
快速回复:我正在自学,在这里卡死挂机了...有一些地方不懂,能不能解析一下,谢 ...
数据加载中...
 
   



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

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