我想用一个空格来代替字符串中的多个空格,但是我下面的代码不起作用。逻辑错误是什么?
#include<stdio.h>
#include<string.h>
main()
{
char input[100];
int i,j,n,z=0;
scanf("%d",&n);
z=n;
for(i=0;i<n;i++)
scanf("%c",&input[i]);
for(i=0;i<n;i++)
{
if(input[i]==' ' && (input[i+1]==' ' || input[i-1]==' '))
{
--z;
for(j=i;j<n;j++)
input[j]=input[j+1];
}
}
for(i=0;i<z;i++)
printf("%c",input[i]);
printf("\n");
}
9条答案
按热度按时间ql3eal8s1#
我会这样做:
当然,上面的函数要求您正确地终止字符串,而您目前没有这样做。
上面的函数所做的,基本上是复制字符串本身。例外情况是当有空格时,多个空格被简单地丢弃。
由于函数修改源字符串,因此不能用于字符串文字。
4smxwvx52#
scanf
给你带来了一些问题:输入长度n
后,它读取您给予的\n
。因此,您将错过for
循环退出后的最后一个字符。已经给出的答案已经足够好了。但如果你想遵循自己的逻辑,试试这个:g9icjywg3#
if(input[i]==' ' && (input[i+1]==' ' || input[i-1]==' '))
情况“1 3”:when i == 0 accses input[i-1] Out-of-Bounds
scanf("%d",&n);
remain newline,(input[0] <-- '\n')
固定于
scanf("%d%*c",&n);
lh80um4z4#
为什么要把事情弄得这么复杂?您可以使用
strtok
来检查单个空格并忽略它们。然后,您可以使用strcat
将字符串连接成一个完整的句子,然后就完成了。我是这样做的:
lsmepo6l5#
hi3rlvi26#
你不能尝试这个简单的代码:
kxe2p93d7#
你必须修复下面的for循环。for循环限制应该是
z
而不是n
由
顺便说一句:你的
scanf()
(读字符)得到的第一个字符是换行符(\n
)。这个换行符来自十进制的第一个scanf()
(%d
)gdx19jrr8#
1rhkuytd9#
最简单的方法,使用string.h库中的两个方法: