Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中转换字符串中的字母_C_String_Switch Statement_Swap_Letters - Fatal编程技术网

在C语言中转换字符串中的字母

在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

我不知道为什么这个代码不起作用

例如,该代码应该将字符串中的所有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", &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
有一些较大的值,则更多的比较将花费更多的时间。@haccks
else
是多余的,因为前面的
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