C 比较每个字符的字符串,按长度拆分字符串也可以

C 比较每个字符的字符串,按长度拆分字符串也可以,c,C,我有两个字符串,需要比较它们并说明哪些字符是正确的 我的代码是: char Palavra = "exemplo"; int Tamanho = strlen(Palavra),i; printf("Which is your guess?\n"); char Palpite[Tamanho]; fgets(Palpite,Tamanho,stdin); char Mensagem[50]; strcpy(Mensagem,"The follow

我有两个字符串,需要比较它们并说明哪些字符是正确的

我的代码是:

char Palavra = "exemplo";
int Tamanho = strlen(Palavra),i;
printf("Which is your guess?\n");
char Palpite[Tamanho];
fgets(Palpite,Tamanho,stdin);
char Mensagem[50];
strcpy(Mensagem,"The following characters are correct: ");
    for(i=0;i<=Tamanho;i++){
        if(Palavra[i] == Palpite[i]) sprintf(Mensagem,"%s %i",Mensagem,i+1);
    }
    printf("%s",Mensagem);
char Palavra=“exemplo”;
int Tamanho=斯特伦(帕拉夫拉),i;
printf(“您的猜测是什么?\n”);
炭触须[塔曼霍];
fgets(帕尔皮特、塔曼霍、斯丁);
char Mensagem[50];
strcpy(mensage,“以下字符正确:”);

对于(i=0;i可能这就是问题所在:

int Tamanho = strlen(Palavra),i;
...
for(i=0;i<=Tamanho;i++){
   if(Palavra[i] == Palpite[i]) ... do something
}
另外,不要忘记,帕尔皮特的长度可能小于帕尔瓦拉的长度。如果
i>=strlen(帕尔皮特)

更好:

int len = strlen(Palpite);
int count = (Tamanho <= len) ? Tamanho : len;
for(i=0; i < count; i++){
   if(Palavra[i] == Palpite[i]) ... do something
}
int len=strlen(触诊);

int count=(Tamanho也许这就是问题所在:

int Tamanho = strlen(Palavra),i;
...
for(i=0;i<=Tamanho;i++){
   if(Palavra[i] == Palpite[i]) ... do something
}
另外,不要忘记,帕尔皮特的长度可能小于帕尔瓦拉的长度。如果
i>=strlen(帕尔皮特)

更好:

int len = strlen(Palpite);
int count = (Tamanho <= len) ? Tamanho : len;
for(i=0; i < count; i++){
   if(Palavra[i] == Palpite[i]) ... do something
}
int len=strlen(触诊);

int count=(Tamanho可能不起作用,因为您已将指向数组的指针指定给char值。
另外,可能是您正在使用for i跳出数组边界,这可能不起作用,因为您已将指向数组的指针指定给char值。
还有一种可能是,您正在使用for i跳出数组边界,它在这段代码中的工作与预期的一样,尽管最后一个if是一个明确的解决方法,但我使用它并不十分方便

    int Tamanho = strlen(Palavra),i;
    printf("Which is your guess?\n");
    char Palavra = "exemplo";   
    char Palpite[Tamanho];
    fgets(Palpite,Tamanho,stdin);
    char Mensagem[50];
    strcpy(Mensagem,"The following characters are correct: ");
    for(i=0; i<=Tamanho; i++) {
        if(Palavra[i] == Palpite[i]) {
            if(i==Tamanho) {
                sprintf(Mensagem,"%s %i",Mensagem,i);
            } else {
                sprintf(Mensagem,"%s %i",Mensagem,i+1);
            }
        }
    }
    printf("%s",Mensagem);
int Tamanho=strlen(Palavra),i;
printf(“您的猜测是什么?\n”);
char Palavra=“exemplo”;
炭触须[塔曼霍];
fgets(帕尔皮特、塔曼霍、斯丁);
char Mensagem[50];
strcpy(mensage,“以下字符正确:”);

对于(i=0;i来说,它与此代码的预期效果一样,尽管最后一个if是一个明确的解决方案,但我使用它并不十分方便

    int Tamanho = strlen(Palavra),i;
    printf("Which is your guess?\n");
    char Palavra = "exemplo";   
    char Palpite[Tamanho];
    fgets(Palpite,Tamanho,stdin);
    char Mensagem[50];
    strcpy(Mensagem,"The following characters are correct: ");
    for(i=0; i<=Tamanho; i++) {
        if(Palavra[i] == Palpite[i]) {
            if(i==Tamanho) {
                sprintf(Mensagem,"%s %i",Mensagem,i);
            } else {
                sprintf(Mensagem,"%s %i",Mensagem,i+1);
            }
        }
    }
    printf("%s",Mensagem);
int Tamanho=strlen(Palavra),i;
printf(“您的猜测是什么?\n”);
char Palavra=“exemplo”;
炭触须[塔曼霍];
fgets(帕尔皮特、塔曼霍、斯丁);
char Mensagem[50];
strcpy(mensage,“以下字符正确:”);
for(i=0;i代码由于试图访问数组范围之外的对象而导致未定义行为(UB)

i==Tamanho
时,
触诊[i]
不好

char Palpite[Tamanho];
for(i=0;i<=Tamanho;i++){
  if(Palavra[i] == Palpite[i]) sprintf(Mensagem,"%s %i",Mensagem,i+1);
}
替代代码可以一直写到最后

size_t len = strlen(Mensagem);
sprintf(Mensagem + len," %i",i+1);
更好的代码应该使用
snprintf()
来避免缓冲区溢出


启用了良好警告功能的编译器可能会警告类型不匹配。为节省时间,请启用所有警告

char Palavra = "exemplo";

UB用于在数组边界外写入。
char mensage[50];
太小,无法写入
“以下字符正确:1 3 4 5 6 8”
,需要51个字符

考虑使用更大的geneorus大小缩放
mensage[];
,并使用
snprintf()
以避免溢出。

由于试图访问数组范围之外的内容,代码会导致未定义的行为(UB)

i==Tamanho
时,
触诊[i]
不好

char Palpite[Tamanho];
for(i=0;i<=Tamanho;i++){
  if(Palavra[i] == Palpite[i]) sprintf(Mensagem,"%s %i",Mensagem,i+1);
}
替代代码可以一直写到最后

size_t len = strlen(Mensagem);
sprintf(Mensagem + len," %i",i+1);
更好的代码应该使用
snprintf()
来避免缓冲区溢出


启用了良好警告功能的编译器可能会警告类型不匹配。为节省时间,请启用所有警告

char Palavra = "exemplo";

UB用于在数组边界外写入。
char mensage[50];
太小,无法写入
“以下字符正确:1 3 4 5 6 8”
,需要51个字符


考虑使用更大的geneorus尺寸缩放
Mensagem[];
,并使用
snprintf()
以避免溢出。

您能解释一下为什么不能使用
吗(i=0;i
如果我可以以数组的形式访问这两个变量,那就很容易了……但不幸的是,这不起作用
——但你们绝对可以以数组的形式访问这两个变量,它应该能起作用。什么不起作用了?哎呀,对不起,刚才测试得更深了一点,发现我的错误不在for循环中,就在那个之后。会更新问题,对不起,你们能吗解释为什么不能将
用于(i=0;i
如果我可以以数组的形式访问这两个变量,那就很容易了……但不幸的是,这不起作用
——但你绝对可以以数组的形式访问这两个变量,它应该能起作用。什么不起作用了?哎呀,对不起,刚才测试得更深了一点,发现我的错误不在for循环中,在那之后。将更新问题,对此
我感到抱歉nt计数=(Tamanho-Perpite不会大于Tamanho,因为fgets只考虑与Palavra的长度相同的Perpite,我尝试了
(i=0;i
它也不起作用,同样的问题
int计数=(Tamanho-Perpite不会比Tamanho大,因为fgets认为Perpite的长度与Palavra的长度相同。我尝试了
(i=0;i
它也不起作用,同样的问题