使用数组计算括号的数量

时间:2018-12-31 00:02:19

标签: c

我是编码的新手,如果您能帮助我解决这个问题,我将不胜感激。我无法找出为什么我的代码没有给我正确的结果。谢谢您的宝贵时间!

问: 使用一维数组,计算右括号和右括号的数量。输入必须在一行中。 例如输入:(()))     输出:3 2

我使用一个数组在一行中接收输入,并使用for循环来计算打开/关闭括号的数量。

#include <stdio.h>

int main(){
char str[1000]; int l=0;r=0;

printf("Enter:\t");
gets(str);

int length=sizeof(str)/sizeof(str[0]);

for(int i=0;i!=EOF && i<length;i++)
{
    if(str[i]=='(')
    l++;
    else if(str[i]==')')
    r++;
}
printf("%d %d",l,r);
}

预期 输入:(()) 输出:2 2

我得到了什么 输入:(()) 输出:6 2

4 个答案:

答案 0 :(得分:1)

不需要

i!=EOF,因为这不是文件

int length=sizeof(str)/sizeof(str[0])没有给出strlen()中的字符串#include <string.h>的长度

答案 1 :(得分:0)

您的循环是错误的(实际上是您的情况)

for(size_t i = 0; i < strlen(str);i++)
{
    if(str[i]=='(')
    {
        l++;
    }
    if(str[i]==')')
    {
        r++;
    }
}

答案 2 :(得分:0)

基本的C学习中涵盖了一些错误。

sizeof(str)/sizeof(str[0]);返回str数组的大小,在您的情况下为1000。要获取用户输入的长度,请使用strlen函数:int length = strlen(str)

稍后,将您的for循环用作for(int i=0;i<length;i++)或更高版本:

//Include string.h on beginning of file
#include <string.h>

size_t length = strlen(str);
for (size_t i = 0; i < length; i++) {
    //Do your if.
}

答案 3 :(得分:0)

在r的声明中您还会遇到语法错误。 您可能会得到int l = 0,r = 0; 要么 Int = 0; Int r = 0; 虽然,编译器应该已经对此发出警告。