Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/136.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 - Fatal编程技术网

返回C语言中不匹配的字符

返回C语言中不匹配的字符,c,C,从这段代码中,我可以得到字符数组中的匹配字符。但是我怎样才能得到它们之间唯一不匹配的字符呢。我试过使用=处于if状态,但似乎不起作用。有人帮忙吗?所以我可以从这个字符数组中得到不匹配的字符 #include<stdio.h> #include<conio.h> int main(){ clrscr(); char a[50]; char b[50]; printf("Enter any value here\n"); scanf(

从这段代码中,我可以得到字符数组中的匹配字符。但是我怎样才能得到它们之间唯一不匹配的字符呢。我试过使用=处于if状态,但似乎不起作用。有人帮忙吗?所以我可以从这个字符数组中得到不匹配的字符

#include<stdio.h>
#include<conio.h>

int main(){
    clrscr();
    char a[50];
    char b[50];
    printf("Enter any value here\n");
    scanf("%s",&a);
    printf("Enter any value here\n");
    scanf("%s",&b);

    for(int a1=0;a1<=5;a1++)
    {
        for(int b1=0;b1<=5;b1++)
        {
           if(a1[a] == b1[b])
           {
               printf("%c",a[a1]);
           }
        }
     }
     getch();
     return 0;
}
#包括
#包括
int main(){
clrsc();
chara[50];
charb[50];
printf(“在此输入任何值\n”);
scanf(“%s”、&a);
printf(“在此输入任何值\n”);
scanf(“%s”、&b);

对于(int a1=0;a1它不起作用的原因是,如果在if语句中添加!则只打印a中的不匹配字符,而不打印b。只需添加一行:
printf(“%c”,b1[b])

根据查找“它们之间的不匹配字符”的含义,有几种可能的方法如果要查找
a
b
中但不同时存在的所有字符,一种简单(但不是最佳)的方法是:

  • 创建两个数组(并集)中所有字符的数组
    c
  • 循环浏览
    a
    并查找
    c
    中不存在的所有字符
  • 循环浏览
    b
    并查找
    c
    中没有的所有字符
  • 例如:

    这里有一个方法:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main( int argc, char **argv )  {
    
       char a[50];
       char b[50];
       char unmatched[100];
       int lena, lenb, i;
       int numUnmatched = 0;
       printf("Enter any value here\n");
       scanf("%s",a);
       printf("Enter any value here\n");
       scanf("%s",b);
       lena = strlen(a);
       lenb = strlen(b);
       unmatched[0] = '\0';
       for(i=0; i<lena; i++) {
          if ( !strchr( b, a[i] ) ) {
             if ( ! strchr(unmatched, a[i]) ) {
                unmatched[numUnmatched++] = a[i];
             }
          }
       }
       for(i=0; i<lenb; i++) {
          if ( !strchr( a, b[i] ) ) {
             if ( ! strchr(unmatched, b[i]) ) {
                unmatched[numUnmatched++] = b[i];
             }
          }
       }
    
       for ( i=0; i < numUnmatched; i++ ) {
          printf( "%c ", unmatched[i] );
       }
       printf( "\n" );
       return EXIT_SUCCESS;
    }
    
    #包括
    #包括
    #包括
    int main(int argc,字符**argv){
    chara[50];
    charb[50];
    字符不匹配[100];
    int lena,lenb,i;
    int numUnmatched=0;
    printf(“在此输入任何值\n”);
    scanf(“%s”,a);
    printf(“在此输入任何值\n”);
    scanf(“%s”,b);
    lena=斯特伦(a);
    lenb=strlen(b);
    不匹配的[0]='\0';
    
    对于(i=0;i这是正确的,并且非常有效,即使对于更长的字符串也是如此。但是,它以排序规则的顺序打印结果,这可能适用,也可能不适用

    #include <stdio.h>
    #include <conio.h>
    #include <limits.h>
    
    int main(){
        char a[50];
        char b[50];
        int a_chars[UCHAR_MAX + 1] = {0};
        int b_chars[UCHAR_MAX + 1] = {0};
        int i;
    
        clrscr();
        printf("Enter any value here\n");
        scanf("%49s%*[^\n]",&a);
        printf("Enter any value here\n");
        scanf("%49s%*[^\n]",&b);
    
        for (i = 0; a[i]; i++) {
            a_chars[(unsigned char) a[i]] = 1;
        }
        for (i = 0; b[i]; i++) {
            b_chars[(unsigned char) b[i]] = 1;
        }
        for (i = 1; i <= UCHAR_MAX; i++) {
            if (a_chars[i] ^ b_chars[i]) {
                putchar(i);
            }
        }
        putchar('\n');
    
        getch();
        return 0;
    }
    
    #包括
    #包括
    #包括
    int main(){
    chara[50];
    charb[50];
    int a_chars[UCHAR_MAX+1]={0};
    int b_chars[UCHAR_MAX+1]={0};
    int i;
    clrsc();
    printf(“在此输入任何值\n”);
    scanf(“%49s%*[^\n]”,&a);
    printf(“在此输入任何值\n”);
    scanf(“%49s%*[^\n]”,&b);
    对于(i=0;a[i];i++){
    a_chars[(无符号字符)a[i]=1;
    }
    对于(i=0;b[i];i++){
    b_字符[(无符号字符)b[i]]=1;
    }
    
    对于(i=1;我请缩进您的代码。另外,
    scanf(“%s”,&a)
    是错误的。提示:它的类型是什么?@YuHao,
    scanf(“%s”,&a)
    没有错误,除了在技术上。对于
    a
    的特定类型(
    char
    数组),它与
    scanf(“%s”,a)具有相同的效果
    ,我想你会推荐它。@Brendom,展示你试图解决实际问题的代码,而不是相关问题的代码。这是打印笑脸不知道为什么?@JohnBollinger不依赖于
    scanf()
    ,它可能有一天会咬到你。类似
    scanf的代码(“%s”,&a);
    不仅是不可移植的,这是错误的。它似乎在某些机器上工作的事实证明不了什么。我认为在这种情况下,
    fgets()
    更安全、更清晰。另外,第三个循环条件的第二部分中的
    size(char)
    比无效的数组访问更合适。@fsacer,
    sizeof(char)
    在循环条件下是不正确的,因为array
    a_chars
    的元素是
    int
    s。给定的形式对于数组中的元素数量来说是完全正确的,而不管元素的类型如何。另一方面,对于这个问题来说,这太过分了,所以我要简化它。@fsacer,
    fgets()
    并不比使用
    scanf()
    更安全。它可能更清晰,也可能不更清晰,这取决于谁在读代码。我保留了
    scanf()
    ,因为OP使用了它,并且显然知道它,并演示如何使用字段宽度来避免输入数组溢出。另外,
    fgets()
    将在读取时存储终止换行符,这可能会令人惊讶。@fsacer此外,
    sizeof
    运算符不计算其操作数,它只考虑静态确定的操作数类型。因此,
    sizeof(a_chars[0])
    此答案中最初出现的表达式不会导致执行数组访问。这是指针中有趣的东西。我实际上更像是一个C#guy。我实际上在MSDN上找到了该表达式,它确定数组中的元素数。