检查第一个数字是否包含第二个数字



我得到2个数字。我应该打印第一个是否包含第二个。如果是,请从右侧打印其匹配位置(第一个位置为0(,如果不是 - 打印-1。例如,52335包含带有位置2335,但4554不包含44

这是我尝试过的代码,但它没有完成这项工作

int main () {
int location, position = -1;
int number1, number2;
printf("Please enter number 1: ");
scanf("%d", &number1);
printf("Please enter number 2: ");
scanf("%d", &number2);
int temp1 = number1, temp2 = number2;
for (temp1 = number1; temp1 > 0; temp1 /= 10) {
location = position++;
for (temp2 = number2; temp2 > 0; temp2 /= 10) {
if (temp1%10 != temp2%10) {
location = -1;
break;
}
else {
temp1 /= 10;
location++;
}
}
if (location != -1) break;
}
printf("%dn", location);
}

不使用帮助函数

no sprintf only loops https://godbolt.org/z/sfYJJh

char *myrevitoa(int number, char *buff)
{
char *start = buff, *tmp = buff;
while(number)
{
*buff++ = (number % 10) + '0';
number /= 10;
}
*buff-- = 0;
return tmp;
}
int is(int x, int y)
{
char numbers[2][12];
myrevitoa(x, numbers[0]);
myrevitoa(y, numbers[1]);
return !!strstr(numbers[0], numbers[1]);
}
int main()
{
int haystack = 12345678;
int neadles[] = {123, 321, 12345678, 1, 567};
for(int i = 0; i < sizeof(neadles) / sizeof(neadles[0]); i++)
printf("is %d part of %d? %sn", neadles[i], haystack, is(haystack, neadles[i])  ? "YES" : "NO");
}

https://godbolt.org/z/ZAF_wY

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int is(int x, int y)
{
char numbers[2][12];
snprintf(numbers[0], sizeof(numbers[0]), "%d", x);
snprintf(numbers[1], sizeof(numbers[1]), "%d", y);
return !!strstr(numbers[0], numbers[1]);
}
int main()
{
int haystack = 12345678;
int neadles[] = {123, 321, 12345678, 1, 567};
for(int i = 0; i < sizeof(neadles) / sizeof(neadles[0]); i++)
printf("is %d part of %d? %sn", neadles[i], haystack, is(haystack, neadles[i])  ? "YES" : "NO");
}

好的,现在我知道你的问题是什么了。您需要引入另一个变量,而不是修改 temp1 变量。

#include <stdio.h>
#include <stdint.h>
int main () {
int location, position = -1;
int number1 = 34337, number2 = 43;
int temp1 = number1, temp2 = number2, temp3;
for (temp1 = number1; temp1 > 0; temp1 /= 10) {
location = position++;
temp3 = temp1;
for (temp2 = number2; temp2 > 0; temp2 /= 10) {
if (temp3%10 != temp2%10) {
location = -1;
break;
}
else {
temp3 /= 10;
location++;
}
}
if (location != -1) break;
}
printf("%dn", location);
}

最新更新