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

时间:2015-07-02 18:31:44

标签: c

从这段代码中我可以得到char数组中的匹配字符。但是如何才能获得它们之间唯一不匹配的字符。我尝试在 if 条件下使用!= ,但似乎无效。有帮助吗?所以我可以从这个char数组中获取不匹配的字符。

#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;
}

3 个答案:

答案 0 :(得分:1)

即使对于更长的字符串,这也是正确且非常有效的。然而,它以整理顺序打印结果,这可能适合也可能不适合。

#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;
}

它会扫描每个字符串以记录它包含哪些字符的表,然后扫描这两个表以查找一个字符而不是另一个字符。

此外,与您的代码不同,它适应输入字符串的实际长度,最大允许值(49个字符),并且在用户输入更长字符串的情况下不会产生未定义的行为。如果用户提供更长的字符串,则忽略多余的字符。

答案 1 :(得分:0)

它不起作用的原因是因为如果你确实添加了!在if语句中,只打印a中不匹配的字符,但不打印b。只需添加一行:printf("%c", b1[b])即可。

答案 2 :(得分:0)

有几种可能的方法,取决于您通过查找“它们之间的不匹配字符”的含义。如果您要查找ab中的所有字符,而不是两者中的字符,则简单(但不是最佳)的方法是:

  1. 创建两个阵列(联合)中所有字符的数组c
  2. 循环浏览a,找到c以外的所有字符。
  3. 循环浏览b,找到c以外的所有字符。
  4. 例如:

    这是一种方式:

    #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;
    }