在C语言中转换字符串中的字母
我不知道为什么这个代码不起作用 例如,该代码应该将字符串中的所有a切换为b,将所有b切换为a并打印结果 输入:在C语言中转换字符串中的字母,c,string,switch-statement,swap,letters,C,String,Switch Statement,Swap,Letters,我不知道为什么这个代码不起作用 例如,该代码应该将字符串中的所有a切换为b,将所有b切换为a并打印结果 输入: abcd a b c d 预期产出: badc 代码: intmain() { int n,m,i,j; scanf(“%d%d”,&n,&m); 字符s[n+1],x[m+1],y[m+1]; scanf(“%s”,s); 对于(i=0;i您的逻辑是正确的。您只需在%c说明符之前在scanf for(i=0; i<m; i++) { scanf(" %c", &am
abcd
a b
c d
预期产出:
badc
代码:
intmain()
{
int n,m,i,j;
scanf(“%d%d”,&n,&m);
字符s[n+1],x[m+1],y[m+1];
scanf(“%s”,s);
对于(i=0;i您的逻辑是正确的。您只需在%c
说明符之前在scanf
for(i=0; i<m; i++)
{
scanf(" %c", &x[i]);
scanf(" %c", &y[i]);
}
正如我所评论的,在这些行中的%c
前面需要一个空格
scanf("%c", &x[i]);
scanf("%c", &y[i]);
防止%c
格式类型读取先前scanf
调用在输入缓冲区中留下的空白。更改为
scanf(" %c", &x[i]);
scanf(" %c", &y[i]);
除了
代码不确保s
在打印时终止为空字符-导致未定义的行为。应使用for(i=0;s[i]&&i您在输出中也使用d
切换c
,使用c
切换d
。这只是一个示例。用户要将输入的任何字母切换到另一个字母,反之亦然。您能将每次迭代的内容打印出来,看看有什么吗?这一行中需要一个空格scanf(“%c”,&x[i]);
在%c
之前,因此它读作scanf(“%c”,&x[i]);
和下一行一样。这是为了删除在上一次scanf
@WeatherVane之后在输入缓冲区中留下的空白。你是个天才。非常感谢你的帮助!我如何减少这个程序的时间限制?@haccks对于冗余的else
?@WeatherVane;e有执行时间惩罚吗lse
不是多余的,但如果假设m
有一些较大的值,则更多的比较将花费更多的时间。@hacckselse
是多余的,因为前面的break
在前一个条件为真时是多余的。@WeatherVane;嗯……。如果previous不是真的,则执行else
部分。但是,你是对的else
是多余的,但没有执行时间损失。现代编译器足够聪明,可以对其进行优化。如何减少此程序的时间限制?什么时间限制?这是另一个问题吗?
scanf("%c", &x[i]);
scanf("%c", &y[i]);
scanf(" %c", &x[i]);
scanf(" %c", &y[i]);
abcd
a b
c d