Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 返回文本中任何字符的位置_C_String - Fatal编程技术网

C 返回文本中任何字符的位置

C 返回文本中任何字符的位置,c,string,C,String,该程序旨在返回表s2中字符在表S1文本中的位置。如果出现故障,则返回-1 #include <stdio.h> #include <stdlib.h> #define RANGE 10 int any(char [], char []); int main() { char s1[RANGE]; char s2[RANGE]; int i,j; while( (s1[i]=getchar()) != EOF); while( (

该程序旨在返回表s2中字符在表S1文本中的位置。如果出现故障,则返回-1

#include <stdio.h>
#include <stdlib.h>
#define RANGE 10

int any(char [], char []);

int main()
{
    char s1[RANGE];
    char s2[RANGE];
    int i,j;
    while( (s1[i]=getchar()) != EOF);
    while( (s2[j]=getchar()) != EOF);
    printf("%d", any(s1, s2));
 }

 int any(char s1[], char s2[])
 {
 int i,j;

 for(i=0;s1[i]!='\0';i++)
    for(j=0;s2[j]!='\0';j++)
    {
        // for debug
        printf("\n%s", s1[i]);
        printf("\n%s", s2[j]);
        //
        if(s1[i]==s2[j])
            return i;
    }
 return -1;
 }
#包括
#包括
#定义范围10
int any(char[],char[]);
int main()
{
字符s1[范围];
字符s2[范围];
int i,j;
而((s1[i]=getchar())!=EOF);
而((s2[j]=getchar())!=EOF);
printf(“%d”,任何(s1,s2));
}
int any(字符s1[],字符s2[]
{
int i,j;
对于(i=0;s1[i]!='\0';i++)
对于(j=0;s2[j]!='\0';j++)
{
//用于调试
printf(“\n%s”,s1[i]);
printf(“\n%s”,s2[j]);
//
if(s1[i]==s2[j])
返回i;
}
返回-1;
}
在我看来,在比较表中的字符时会出现问题

在这种情况下,程序应返回-1:

该代码存在以下问题:

(1) 变量i和j在代码中未初始化,可能导致崩溃:

int i,j;
while( (s1[i]=getchar()) != EOF);
while( (s2[j]=getchar()) != EOF);
(2) 在读取输入时,代码还需要增加i和j的值。否则将导致所有输入写入s1[0]/s2[0]:

while( (s1[i]=getchar()) != EOF);
while( (s2[j]=getchar()) != EOF);
(3) 应该从s1/s2中删除终止字符^Z(您可能还需要删除0x0A(换行符))

(4) 调试语句输出的是字符,而不是字符串,因此printf()格式字符串应为“\n%c”,而不是“\n%s”

清理代码将提供以下工作版本:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define RANGE 10

int any(char [], char []);

int main()
{
char s1[RANGE];
char s2[RANGE];
int i,j;

i = j = 0;

while( (s1[i++]=getchar()) != EOF);
s1[i-2] = 0;
while( (s2[j++]=getchar()) != EOF);
s2[j-2] = 0;

printf("%d", any(s1, s2));
}

int any(char s1[], char s2[])
{
int i,j;

for(i=0;s1[i]!='\0';i++)
for(j=0;s2[j]!='\0';j++)
{
    // for debug
    printf("\n%c", s1[i]);
    printf("\n%c", s2[j]);
    //
    if(s1[i]==s2[j])
        return i;
}
return -1;
}
#包括
#包括
#包括
#定义范围10
int any(char[],char[]);
int main()
{
字符s1[范围];
字符s2[范围];
int i,j;
i=j=0;
while((s1[i++]=getchar())!=EOF);
s1[i-2]=0;
而((s2[j++]=getchar())!=EOF);
s2[j-2]=0;
printf(“%d”,任何(s1,s2));
}
int any(字符s1[],字符s2[]
{
int i,j;
对于(i=0;s1[i]!='\0';i++)
对于(j=0;s2[j]!='\0';j++)
{
//用于调试
printf(“\n%c”,s1[i]);
printf(“\n%c”,s2[j]);
//
if(s1[i]==s2[j])
返回i;
}
返回-1;
}
“aaaa^Z”/“bbbb^Z”的输出为:

// for debug
printf("\n%s", s1[i]);
printf("\n%s", s2[j]);

%s表示参数是字符串(aka char*),但实际上只传递了一个char。 试试这个:

// for debug
printf("\n%c", s1[i]);
printf("\n%c", s2[j]);

什么问题?好节目。你的问题是什么?它们被称为数组,而不是表!i和j未在main中初始化。也许这就是问题所在。