c语言疑问:求各位解疑答惑

img


大一新生初学C语言,为什么把项目存在C盘里自己建的文档就不能跑了,放到默认路径就可以,还是说是因为其他的问题导致的

这个和项目配置有关,项目配置的启动项配的不对,所以找不到

【相关推荐】



  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/1102101
  • 这篇博客也不错, 你可以看下C语言实现栈的中缀表达式转化为后缀表达式,并且计算后缀表达式
  • 同时,你还可以查看手册:c语言-内存模型与数据竞争 中的内容
  • 您还可以看一下 CSDN讲师老师的C语言精髓之编译过程视频教程课程中的 计算机的组成部分,栈内存的特点;画出内存图,引入指针的概念小节, 巩固相关知识点
  • 除此之外, 这篇博客: C语言数据结构,使用静态栈和串判断字符串是否为回文中的 C语言数据结构,使用静态栈和串判断字符串是否为回文 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    判断思路如下:将字符串前一半入栈,然后,栈中元素和字符串后一半进行比较。即将第一个出栈元素和后一半串中第一个字符比较,若相等,则再出栈一个元素与后一个字符比较,……,直至栈空,结论为字符序列是回文。在出栈元素与串中字符比较不等时,结论字符序列不是回文。
    代码如下

    #include<stdio.h>
    
    #define maxsize 30   
    
    /*顺序静态栈*/
    typedef struct Stack
    {
    	char data[maxsize];
    	int top;//栈顶指针
    }stack;
    
    /*静态串*/
    typedef struct Strand
    {
    	char data[maxsize];
    	int  length;//串的实际长度
    }strand;
    
    /*初始化栈*/
    void Initialize_stack(stack& S)
    {
    	S.top = 0;
    }
    /*初始化串*/
    void Initialize_strand(strand& L)
    {
    	L.length = 0;
    }
    
    
    /*压栈*/
    void pushstack(stack& S, char c)
    {
    	S.data[S.top] = c;
    	S.top++;
    }
    
    /*入串*/
    void pushstrand(strand& L, char c)
    {
    
    	L.data[L.length] = c;
    	L.length++;
    }
    
    /*出栈*/
    char popstack(stack& S)
    {
    	S.top--;
    	return S.data[S.top];
    }
    
    /*出串*/
    char popstrand(strand& L, int i)//增加一个参数i,使得从串头依次输出字符
    {
    	return L.data[i];
    }
    
    /*栈中数据出栈与串后一半比较*/
    void compare(stack& S, strand& L)
    {
    	char a, b;
    	/*
    	其实不管是输入的字符串是奇数还是偶数,他们比较的次数始终是成对出现的,
    	偶数的话很容易理解,对于奇数的话,中间的那个字符是不需要比较的,所以,
    	只需要比较两边的字符即可,而:比较的次数=栈中的字符数=串中的字符数,
    	也就是说:  int m = S.top ;等价于 int m = L.length;
    	*/
    	int m = S.top;
    	int i = 0;
    	char popstack(stack & S);
    	char popstrand(strand & L, int i);
    	printf("运算结果:");
    	for (i = 0; i < m; i++)
    	{
    		a = popstack(S);//调用出栈函数,把栈顶字符赋给a
    		b = popstrand(L, i);//调用出串函数,把栈顶字符赋给b
    		/*
    		下面的代码采用逆推的方式思考:
    		如果字符串是回文,满足条件是:每一次的比较必须是相等的,也就是说:最后一次的比较是确定是否为回文的关键因素
    		如果字符串不是回文,满足条件是:只需要有一次比较不相等即可
    		*/
    		if (i == m - 1) //最后一次比较,如果a,b相等了,那么就一定是回文
    		{
    			if (a == b)
    			{
    				printf("这是回文\n");
    			}
    		}
    		if (a != b)
    		{
    			printf("这不是回文\n");
    			i = m;  //只需要有一次比较是不相等,就不需要再继续循环比较了,直接给i赋值跳过循环即可
    		}
    
    
    	}
    
    }
    
    /*主方法*/
    int main()
    {
    	stack S;
    	strand L;
    	int j = 0, k = 0, i = 0;
    	char str[maxsize], c;
    	void pushstack(stack & S, char c);
    	void pushstrand(strand & L, char c);
    	void compare(stack & S, strand & L);
    	void Initialize_stack(stack & S);
    	void Initialize_strand(strand & L);
    	Initialize_strand(L);
    	Initialize_stack(S);
    	printf("请输入想要查询的字符串:");
    	gets_s(str);
    	for (int i = 0; i < maxsize; i++)//设置一个计数器,找出实际输入个数
    	{
    		if (str[i] == '\0')//当字符为 '\0'时,执行此段语句
    		{
    			j = i;//此时把i的值赋予j,而j就是输入数据的实际个数
    		}
    	}
    	k = j;//中间数据,在后部分字符串入串的时候需要用到
    
    
    
    	if (j % 2 == 0)//如果传入的字符串是偶数个,执行以下代码
    	{
    		j = j / 2;
    		/*把字符串的前一半传入栈中*/
    		for (i = 0; i < j; i++)
    		{
    
    			c = str[i];
    			pushstack(S, c);
    		}
    		/*把字符串的后一半传入串中*/
    		for (i = j; i < k; i++)
    		{
    			c = str[i];
    			pushstrand(L, c);
    		}
    	}
    	else if (j % 2)//如果传入的字符串是奇数个,执行以下代码
    	{
    		j = (j - 1) / 2;
    		/*把字符串的前一半传入栈中*/
    		for (i = 0; i < j; i++)
    		{
    			c = str[i];
    			pushstack(S, c);
    		}
    		/*把字符串的后一半传入串中*/
    		for (i = j + 1; i < k; i++)
    		{
    			c = str[i];
    			pushstrand(L, c);
    		}
    	}
    	compare(S, L);//调用比较函数
    	return 0;
    }
    

    运行结果:
    在这里插入图片描述
    在这里插入图片描述
    如果有什么不合适的地方,还请指出。。。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^