03_16 输出相等字符
通过课程进入 题 号: 220 03_16 输出相等字符 语言要求: C 【3.16】请编写代码输出两个字符串中所有相同位置上相同的字符。 例如,针对"test"和"past"两个字符串,其第3以及第4个字符分别都是s和t,因此输出st。
然后matu里面其实是道填空题:
#include<stdio.h>
char x[] = "programming";
char y[] = "Fortran";
void main()
{
int i = 0l;
while (x[i] != '\0' && y[i] != '\0')
{
if (x[i] == y[i])
{
?????????????????????
}
else i++;
}
}
这个很简单,问号处填:
printf("%c",x[i]); i++;
就对了。
但是很明显,这个代码没有实现输入字符串,检查相同位置的相同字符。
但是这里有个难点,就是c语言里面没有原生的字符串类型(即string),只能用char【】表示。但在格式化输出(printf函数)里面又可以用%s来实现字符串的输出。我感觉很离谱。
然后就是我的一些疑问了:
char str1[50];
char str2[50];
scanf_s("%s %s", str1, str2);
printf("%s %s",str1,str2);
这么写的话,运行结果会是
abd abc
--------------------------------
Process exited after 5.938 seconds with return value 3221225477Press ANY key to exit...
就是说啥都没打出来。
不过好在我换了个方法试试:
char str1[50];
char str2[50];
scanf_s("%s", str1);
scanf_s("%s",str2);
printf("%s %s",str1,str2);
这样就一切正常了:
abb abc
abb abc
--------------------------------
Process exited after 4.771 seconds with return value 0Press ANY key to exit...
所以明显,问题出在:
scanf_s("%s %s", str1, str2);
调试上面的错误代码,会显示
segmentation fault 即 分割错误
上网查了一下,没看懂,就把这个问题留给未来的自己吧🧐。留个链接:
假设已经解决了上面的问题,那就好办了,仿着上面写一段代码:(~ ̄▽ ̄)~
#include<stdio.h>
int main() {
char str1[50];
char str2[50];
scanf_s("%s", str1);
scanf_s("%s",str2);
int i=0;
while(str1[i] != '\0' && str2[i] != '\0'){
if(str1[i]== str2[i]){
printf("%c",str1[i]);
i++;
//TODO
}
else
i++;
//TODO
}
return 0;
}
测试一下,没得毛病:
past test
st
--------------------------------
Process exited after 11.59 seconds with return value 0Press ANY key to exit...