#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int search(char *storage){
int len;
len=strlen(storage);
for(int d=0;d<len;d++){
if(storage[d]!='P'&&storage[d]!='T'&&storage[d]!='A'){
search(storage[d+1]);
}else{
return 0;
}
}
return 1;
}
int main(){
char storage[100][100];
int n,i;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%s",storage[i]);
}
for(int j=i;j>=0;j--){
search(storage[j]);
}
if(search){
printf("YES\n");
}else{
printf("NO\n");
}
return 0;
}
for(int j=i;j>=0;j--){
这个有问题啊,j应该从i-1开始
你这个递归也有问题,main里调用传入storage[j]没问题,这时候storage是二维数组,但函数里search(storage[d+1]);就不行了,因为这里的storage是函数参数,这个参数只是char *,这样storage[d+1]就是第一个字符,正如错误提示所示,你将char传递给char * ,是错误的。改成search(&storage[d+1])可以搜索从storage下一个字符开始的内容
另外就是最后的if(search)了,这个search不是变量,是函数指针,那肯定不是空啊,你到底想判断什么呢?是否搜索到什么东西?那你应该在上面的search函数调用时,定义一个变量接收函数返回值,如果为1,则表示搜索成功,如果找到就可以结束,那么应该再加个break
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int search(char *storage){
int len;
len=strlen(storage);
for(int d=0;d<len;d++){
if(storage[d]!='P'&&storage[d]!='T'&&storage[d]!='A'){
search(&storage[d+1]);
}else{
return 0;
}
}
return 1;
}
int main(){
char storage[100][100];
int n,i,find = 0;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%s",storage[i]);
}
for(int j=i-1;j>=0;j--){
find = search(storage[j]);
if(find)
break;
}
if(find){
printf("YES\n");
}else{
printf("NO\n");
}
return 0;
}
(1)search(storage[d+1])改成 search(&storage[d+1])。
&storage[d+1]即为取storage[d+1]的地址。
(2)for(int j=i;j>=0;j--){ 改成 for(int j=i-1 ;j>=0;j--){
因为上一次的for循环 i 最后多++了一次,所以,这里for循环逆序遍历的时候,j 应该从 i-1开始。
完整代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int search(char* storage) {
int len;
len = strlen(storage);
for (int d = 0; d < len; d++) {
if (storage[d] != 'P' && storage[d] != 'T' && storage[d] != 'A') {
search(&storage[d + 1]);
}
else {
return 0;
}
}
return 1;
}
int main() {
char storage[100][100];
int n, i;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%s", storage[i]);
}
for (int j = i-1; j >= 0; j--) {
search(storage[j]);
}
if (search) {
printf("YES\n");
}
else {
printf("NO\n");
}
return 0;
}
这段代码是想实现什么功能?
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!