从这段代码中我可以得到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;
}
答案 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)
有几种可能的方法,取决于您通过查找“它们之间的不匹配字符”的含义。如果您要查找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;
}