bool isValid(char * s){
int k=-1;
int len=strlen(s);
char stack[10000];
for(int i=0;i<len;i++)
{
if(s[i]=='('||s[i]=='{'||s[i]=='[')
stack[++k]=s[i];
else
{
switch(s[i])
{
case ')':if(s[k]=='(')
k--;break;
case ']':if(s[k]=='[')
k--;break;
case '}':if(s[k]=='{')
k--;break;
}
}
}
if(k==-1)
return true;
return false;
}
判断有效括号序列,为什么输入()[]时错了
if(s[k]=='(')
这里应该是
if(stack[k]=='(')
下面类似
下标访问操作符在c语言中只用于数组,但是由于指针和数组有极多的相似之处,指针在c语言中也可以通过下标访问。举例:
int main()
{
int arr[5] = { 1, 5, 7, 8, 9 };
int *p = arr;
printf("%d %d\n", arr[2], 3[arr]);
printf("%d %d\n", p[2], 3[p]);
return 0;
}
运行结果:
可看到 []对数据位置的控制并不严格,数组名(或指针名)可以和下标调换位置,但是我们平时还是把数字放在[]内,规范自己的代码!
注:《C专家编程》一书中,作者明确指出[ ]运算符作用于指针和数组名时,行为是不一样的。数组名与指针不同。想了解指针和数组的详细关系可以参看这本书。
函数调用运算符 函数名(传入实参)
函数调用操作符可以接受任意多个参数,第一个参数就是函数名,其余参数就是传递给函数的参数,并由调用函数来决定其余参数的类型和个数。
访问结构体成员操作符 . ->
结构体成员的变量可通过 . 访问结构体成员。
使用方fa:变量名.结构体成员名
结构体指针可以通过 -> 指向结构体成员
使用方法:结构体指针->结构体成员
举例:
struct Student
{
int num;
char name[20];
char sex[4];
int age;
};
int main()
{
struct Student student = { 124, "张三", "男", 23 };
struct Student* p = &student;
printf("%d %s %s %d\n", student.num, student.name, p->sex, p->age);
return 0;
}
运行结果:
到这里,c语言操作符基本就给大家罗列完了,但是看完这些操作符你并不一定能正确使用它们,因为在使用过程中你还不能完全掌握它们的优先级和结合性。
两个相邻的操作符先执行哪个?取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。
那么问题出现了,优先级那么多,我需要都背下来吗?能背下来当然更好喽,不过记不下来也没关系,在使用中加上括号就行了,不管它哪个优先级高,都得按照我的逻辑来,这样就简单多了。