| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1065 人关注过本帖
标题:新手求助根据规则求字符串
只看楼主 加入收藏
初学编程的人
Rank: 2
等 级:论坛游民
威 望:2
帖 子:90
专家分:84
注 册:2017-3-12
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:1 
新手求助根据规则求字符串
#include<stdio.h>
#include<string.h>

#define max 1024

char str[max];
int len;

void fun(char array_c[][3], int len)
{
    int i, j, k, s, n, d, flag,temp;
    char *p1, *p2, *p3;
    char test[max];
    p1 = p2 = p3 = str;
    printf("%d\n",sizeof(array_c));
    for (s = 0; s < max; s++)
        strans[s] = 0;
    n = 0;
    d=0;
    flag = 0;
    for (j = 0; j <= len-1; j++)
        for (k = 0; k <= 2; k++)
        {
            strans[n++] = array_c[j][k];
            i = n-1;
            for (i; i-1 >=0; i--)
                if(str[n-1] == str[i-1])
                    n--;            
        }
    str[n] = 0;
    strcpy(test,str);
    while(1){
    for (j = 1; j <= len-1; j++)
        for (k = 0; k <= 2; k++)
            for (i = 0; str[i] != 0; i++){
                if(array_c[j][k] == str[i]){
                switch (k){
                case 0:
                    p1 = str+i;
                    break;
                case 1:
                    p2 = str+i;
                    d = p1-p2;
                        for (d; d > 0; d--){
                            temp = *(str+i);
                            *(str+i) = *(str+i+1);
                            *(str+i+1) = temp;
                            i++;
                        }
                    p2 = str+i;
                    break;
                case 2:
                    p3 = str+i;
                    d = p2-p3;
                        for (d; d > 0; d--){
                            temp = *(str+i);
                            *(str+i) = *(str+i+1);
                            *(str+i+1) = temp;
                            i++;
                        }
                    break;
                default:
                    break;
                    }
                }
            }
            if(!strcmp(test,str))
                return;
            else
            strcpy(test,str);
    }
}

int main(void)
{
    char array_c[][3] = {{'t', 's', 'f'},{'a', 's', 'u'},{'m', 'a', 'f'},{'a', 'i', 'n'},{'s', 'u', 'n'},
                       {'m', 'f', 'u'},{'a', 't', 'h'},{'t', 'h', 'i'},{'h', 'i', 'f'},{'m', 'h', 'f'},
                       {'a', 'u', 'n'},{'m', 'a', 't'},{'f', 'u', 'n'},{'h', 's', 'n'},{'a', 'i', 's'},
                       {'m', 's', 'n'}, {'m', 's', 'u'}};
    //char array_c[][3]={{'d','e','f'},{'a','b','c'},{'b','d','e'},{'c','d','f'}};
    len = sizeof(array_c)/sizeof(array_c[0]);
    fun(array_c, len);
    printf("%s\n",str);
    return 0;
}

前天看到这道题,忙活一整天用了一个简单粗暴的方法,就是搜索比较。没有非法规则的检查,如果给的数组自相矛盾这程序就死循环了。
虽然效率很低但这是我学c以来第一个独立完成的程序。
有几个疑问请教各位老师
1. 指针传递array_c数组到fun函数之后,再用sizeof(array_c)返回的是指针的长度并不是整个数组的长度?
   fun中printf("%d\n",sizeof(array_c)); 返回的是4,并不是51,如果这句放在main中就返回51。如果我想在fun函数中返回整个数组的长度该怎么做?
2. str[128] = {0};是所有元素初始化为零的意思么?vs2010会智能警告,并且编译错误。
3. 这个月1号开始学的c,现在看了《C程序设计语言》第二版,下面该怎么学?
搜索更多相关主题的帖子: include 字符串 
2017-03-26 12:06
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:20 
第一个问题,没有办法。唯一的办法是传递第二个参数,指定数组的大小。
这也是为什么gets()等函数不安全的原因。因为在函数中,无法计算数组的大小。
第二个问题,局部初始化,是C89还是C99的标准。但是VS对C的支持一直很烂,貌似是从VS2015开始对C的支持变好了,但是用VS必须得掌握怎么关闭它默认的安全检查。

[此贴子已经被作者于2017-3-26 12:22编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-03-26 12:09
快速回复:新手求助根据规则求字符串
数据加载中...
 
   



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

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