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

C 检查第一个数字是否包含第二个数字,c,C,我有两个号码。我应该打印第一个是否包含第二个。如果是,则从右侧打印其匹配位置(第一个位置是0),如果不是,则打印-1。例如,52335包含位置为2的335,但4554不包含44 这是我尝试过的代码,但它不起作用 int main () { int location, position = -1; int number1, number2; printf("Please enter number 1: "); scanf("%d", &number1);

我有两个号码。我应该打印第一个是否包含第二个。如果是,则从右侧打印其匹配位置(第一个位置是
0
),如果不是,则打印
-1
。例如,
52335
包含位置为
2
335
,但
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("%d\n", location);
}
不使用帮助功能

不使用仅sprintf循环

char*myrevitoa(整数,char*buff)
{
char*start=buff,*tmp=buff;
while(数字)
{
*buff++=(数字%10)+“0”;
数目/=10;
}
*buff--=0;
返回tmp;
}
整数是(整数x,整数y)
{
字符数[2][12];
myrevitoa(x,数字[0]);
myrevitoa(y,数字[1]);
return!!strstrstr(数字[0],数字[1]);
}
int main()
{
int haystack=12345678;
int Neadels[]={12332112345678,1567};
对于(int i=0;i

#包括
#包括
#包括
整数是(整数x,整数y)
{
字符数[2][12];
snprintf(数字[0],sizeof(数字[0]),%d',x;
snprintf(数字[1],sizeof(数字[1]),%d',y;
return!!strstrstr(数字[0],数字[1]);
}
int main()
{
int haystack=12345678;
int Neadels[]={12332112345678,1567};
对于(int i=0;i
好的,现在我知道你的问题了。您需要引入另一个变量,而不是修改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("%d\n", location);
}
#包括
#包括
int main(){
int位置,位置=-1;
整数1=34337,整数2=43;
int temp1=数字1,temp2=数字2,temp3;
对于(temp1=number1;temp1>0;temp1/=10){
位置=位置++;
temp3=temp1;
对于(temp2=number2;temp2>0;temp2/=10){
如果(temp3%10!=temp2%10){
位置=-1;
打破
}
否则{
temp3/=10;
位置++;
}
}
如果(位置!=-1)中断;
}
printf(“%d\n”,位置);
}

什么是帮助函数?@Hogan例如,一个返回
n
location中数字的函数。我假设禁止将输入扫描为字符。否则这个问题将在三行代码中解决。你应该弄清楚这一点。但这仍然不能弄清楚——因为一种语言的一个重要部分是标准库——你是说标准库不能被使用吗?(但我看到scanf和printf)——标准C库的哪些部分不能使用?——我如何知道什么是辅助函数?正如Marco指出的,使用标准库函数很简单。为什么我们不能用这些?具体要求是什么?使用
sprintf
将两个整数转换为字符串。使用
strstr
在另一个字符串中搜索一个字符串。这真的是唯一合理的方法。角落案例:
myrevitoa(y,0])表单
,而不是预期的
“0”
<代码>myrevitoa(y,某些值为负值)也是有问题的。查找正值正常。
while(number){…}
to
do{…}while(number)修复了0问题。
#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? %s\n", neadles[i], haystack, is(haystack, neadles[i])  ? "YES" : "NO");
}


#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("%d\n", location);
}