问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

一个c语言编程题,求大神指点啊!!!

发布网友 发布时间:2023-09-04 17:27

我来回答

5个回答

热心网友 时间:2024-11-04 16:25

#include<string>//C++版本的,下面另一个是C版本的!!!
#include<iostream>
using namespace std;

string expr, ans;
int maxc = -1;

int run(int st, int c)
{
    string cur = "";
    int i;
    for (i = st;i < (int)expr.length();i++)
    {
        if (expr[i] == '(')
        {
            i = run(i + 1, c + 1);
        }
        else if (expr[i] == ')')
        {
            if (c > maxc)
            {
                ans = cur;
                maxc = c;
            }
            return i + 1;
        }
        else
        {
            cur.push_back(expr[i]);
        }
    }
    if (maxc == -1)
        ans = cur;
    return i + 1;
}

int main()
{
    cin>>expr;
    run(0, 0);
    cout<<ans<<endl;
}

//(((3+4)+(5+6)))-(((5*8)-((6+4))))
//output: 6+4
//x-(y-(z-(q-a)))
//output: q-a
//1+2+3+4+5
//output: 1+2+3+4+5
//(((((1-2)-3)-4)-5)-6)
//output: 1-2

#include<stdio.h>//***************************C版本的!!!!!!
#include<string.h>

#define N 10010
char expr[N], ans[N];
int maxc = -1;

int run(int st, int c)
{
    int i;
    for (i = st;expr[i];i++)
    {
        if (expr[i] == '(')
        {
            i = run(i + 1, c + 1);
        }
        else if (expr[i] == ')')
        {
            if (c > maxc)
            {
                memcpy(ans, expr + st, i - st);
                maxc = c;
            }
            return i + 1;
        }
    }
    if (maxc == -1)
        memcpy(ans, expr + st, i - st);
    return i;
}

int main()
{
    gets(expr);
    run(0, 0);
    printf("%s\n",ans);
}

//(((3+4)+(5+6)))-(((5*8)-((6+4))))
//output: 6+4
//x-(y-(z-(q-a)))
//output: q-a
//1+2+3+4+5
//output: 1+2+3+4+5
//(((((1-2)-3)-4)-5)-6)
//output: 1-2

热心网友 时间:2024-11-04 16:25

设置一个层数计数器数组,当遇到(时+1,遇到)-1,这样得到每个字符的层数了,x+都是0,y+z是1……
字符串里每一个字符都存到这个计数器数组里,然后找到最大的值,输出所有最大值位置上的字符

热心网友 时间:2024-11-04 16:25

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

#define MAX 1000
void main(void)
{

char target_express[1000];
int locate=-1,start=-1,startsum,i,k;
bool LeftMark=false;
i=k=startsum=0;
printf("输入表达式:\n");
scanf("%s",target_express);

while (target_express[i] != '\0')
{

if (target_express[i]=='(') //k表示当前'('层数,locate表示当前'('的位置
{
LeftMark=true;
k++;
locate=i;

}
else if(LeftMark&&target_express[i]==')') // 遇到‘)’终止当前计数,与存在的最大层数比较,若大于则更新数据
{ //startsum 表示当前存储的最大‘(’层数
//start 表示最大层数‘(’开始的位置
LeftMark=false;
if (k > startsum)
{
startsum = k; //最深
start = locate;
}
k=0;
}

i++;
}

start++; // 最终表达式不能含左括号,所以下标再往后移一位
while (target_express[start]!=')')
{
printf("%c",target_express[start]);
start++;
}
printf("\n");

}

热心网友 时间:2024-11-04 16:26

只匹配左括号就可以了。看哪个左括号的层数最多,另外,如果碰到第一个右括号的话,这次层数的计数要停止的。追问怎么实现,如何编程,急求答案……

追答{
char a[]="1+2+(3+4)+(5+6+(7+8))+9+0+(1+2)";
char b[255];
int i = 0;
int nCount1 = -1;
int nCount2 = -1;
int nTagStart = 0;
int nTagStop = 0;
int nTagStartTem = 0;
for(i = 0;i nCount2 )
{
nCount2 = nCount1;
nCount1 = -1;
nTagStart = nTagStartTem;
nTagStop = i - 1;
}
}
}
//b = (char*)malloc(nTagStop - nTagStart + 1)*sizeof(char);
memset(b,0,sizeof(char)*255);
memcpy(b,a+nTagStart+1,nTagStop-nTagStart);
cout<< b<< endl;
}
1+2+(3+4)+(5+6+(7+8))+9+0+(1+2)
7+8
Press any key to continue . . .

热心网友 时间:2024-11-04 16:27

well,这个是暴风影音的面试题吗?追问嗯,求帮忙啊

追答#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
void main(void)
{
char target_express[]="x+(y*z)+(m-(3+4))";
int start=-1,i,k;
bool LeftMark=false;
i=k=0;
  
while (target_express[i])
{

if (target_express[i]=='(')
{
LeftMark=true;
k++;

if(k>=2) // 找到了,是最深层圆括号
{
                          start=i;
  break; // 若去掉这行,则可包含更深层的括号表达式
}
}
    else if(LeftMark&&target_express[i]==')') // 非最深层圆括号
{
             LeftMark=false;
 k=0;
}
        
i++;
}

    start++; // 最终表达式不能含左括号,所以下标再往后移一位
printf("表达式:%s\n最深层圆括号内的表达式为:",target_express);
while (target_express[start]!=')')
{
printf("%c",target_express[start]);
start++;
}
printf("\n");
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
纽约唐人街碎尸案的电影剧情 成年人可以喝金银花益生菌吗 金银花益生菌基本信息 金银花益生菌简要说明 益生瑞氢氧康养机价格 有哪些嗜好是女性怀孕后必须戒掉的?为什么呢? 玻璃为什么有无铅玻璃 pb 什么概念 智能密码锁找哪家更省钱? ...挑选一下那个比较有意思?姓郑。梓昸.梓瞳.炜东.炜桐.炜楠.炜森... 中意一生挚爱终身寿险(分红型)值不值得买?性价比高吗? 芦荟花代表什么 芦荟花代表啥 代鼓雪海涌是什么生肖 谁知道中意人寿保险公司吗?是一家怎样的保险公司啊? - 百... 心理治疗中治疗者与被治疗者的关系应该是 healer意思 周易 请教各位大佬,我家宝宝 刚刚出生,想请各位有文化的高手帮忙起个... 找一本灵异小说,女主有个弟弟,男主是冥界的,男主弟弟叫墨渊,是冥王,冥 ... 一本耽美小说讲的是有一个人有无量功德穿到冥界叫冥王老大的是什么书... 男生该不该看《红楼梦》? 岘港的地理气候 继发型肺结核、是什么意思、能传染给家人吗、必须需要住院治疗_百度... 河南省2009年高考录取率 无限挑战神话特辑哪里能看 河南2009年高考理科一本录取率 2009年河南高考600分以上的人数有多少 2009年河南理科一本录取人数 2022年河南高考分数段位表 香酥鳕鱼块的家常做法 泰康添福壹号聚福版年金险和颐享年年年金险对比,有什么不同?_百度知 ... 购买小汽车购置税多少钱? 儿子就快生了想给儿子取个好听的名字又有意义的,父亲姓蒋。 “滚”字改了吗?为什么打不出以前的“滚”字了呢,就是一个三点水... 环球需要什么申请条件?环球能借钱吗? 环球可以借钱吗 环球能借钱吗 环球可以借钱吗 为了礼物办信用卡不用,有危害吗? 环球能借款吗,额度怎么样? 反复办信用卡拿礼物会有什么后果? 晋享贷分期期数是什么意思 什么歌好听一点呀如题 谢谢了 excel表格中如何让小数保留两位小数点? 石英砂和陶粒耐火度 玻璃砂耐高温多少度 丝芙兰礼品京东自营店是正品吗 湖南涉外经济学院计算机应用技术大专生录取分是多少?新生什么时_百度知 ... 计算机大专分数线 喜欢自食其力自力更生丰衣足食 里有几个成语请回复? 求春联 要求必须包含“自力更生,艰苦奋斗”,以十一字为宜。