返回C语言中不匹配的字符
从这段代码中,我可以得到字符数组中的匹配字符。但是我怎样才能得到它们之间唯一不匹配的字符呢。我试过使用=处于if状态,但似乎不起作用。有人帮忙吗?所以我可以从这个字符数组中得到不匹配的字符返回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(
#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)
在循环条件下是不正确的,因为arraya_chars
的元素是int
s。给定的形式对于数组中的元素数量来说是完全正确的,而不管元素的类型如何。另一方面,对于这个问题来说,这太过分了,所以我要简化它。@fsacer,fgets()
并不比使用scanf()
更安全。它可能更清晰,也可能不更清晰,这取决于谁在读代码。我保留了scanf()
,因为OP使用了它,并且显然知道它,并演示如何使用字段宽度来避免输入数组溢出。另外,fgets()
将在读取时存储终止换行符,这可能会令人惊讶。@fsacer此外,sizeof
运算符不计算其操作数,它只考虑静态确定的操作数类型。因此,sizeof(a_chars[0])
此答案中最初出现的表达式不会导致执行数组访问。这是指针中有趣的东西。我实际上更像是一个C#guy。我实际上在MSDN上找到了该表达式,它确定数组中的元素数。