#include <stdio.h>
#define MAX 1000
void any(char s1[], char s2[], char s3[]);
int main()
{
char string1[MAX], string2[MAX], string3[MAX];
printf("Jepni stringen 1\n");
scanf("%s", &string1); //saving string 1
printf("Jepni stringen 2\n");
scanf("%s", &string2); //saving string 2
any(string1, string2, string3); /*comparing characters from string 2 to string 1 and saving the places where they are equal on third string */
printf("%d", string3[0]); //printing the first character of the third string
return 0;
}
void any(char s1[], char s2[], char s3[])
{
int i, j, k;
k = 0;
for (j = 0; j != '\0'; j++) {
for (i = 0; i != '\0'; i++) {
if (s1[i] == s2[j]) {
s3[k] = i;
j++;
k++;
}
}
}
}
我正在尝试创建一个扫描2个字符串的ac程序(将它们保存在字符串1和2上)比使用函数的程序任意将逐字符看到字符串2个字符与字符串1相等,如果它们是将找到它们被找到的第一个位置。如果没有找到它会显示-1。程序要求第一个字符相等,这就是为什么我总是打印字符串3中的第一个字符。该程序不工作cuz它始终打印-1。 例如,如果我输入字符串1 爸爸 在字符串2中,字符 d 程序应显示 0 位置 如果我把爸爸放在字符串1上 在字符串2上我输入 a 它应该显示 1 。
答案 0 :(得分:2)
首先,for循环没有开始,因为条件是j应该与零不同。在ASCII'\ 0'中为零(可能不在所有机器上),所以你宁愿检查s2 [ j]与零不同。对于i。为 另一件事是s3是一个字符数组,所以把s3 [k] = i不等于'1'或'2',而是等于1或2(ASCII值),所以你应该添加48我(直到'9',然后你将有两位数),或者使用%d格式说明符打印每个字符的字符串字符:
void any(char s1[], char s2[], char s3[])
{
int i, j, k;
k = 0;
for (j = 0; s2[j] != '\0'; j++) {
for (i = 0; s1[i] != '\0'; i++) {
if (s1[i] == s2[j]) {
s3[k] = i;
j++;
k++;
}
}
}
}
也许我错过了其他一些错误,请尝试代码并运行它以查看它是否正确(还记得使用%d说明符来打印s3)。