gpt4 book ai didi

c - 删除字符串中的空格

转载 作者:太空宇宙 更新时间:2023-11-04 05:49:51 26 4
gpt4 key购买 nike

我试图在扫描后删除字符串中的空格。该程序已完美编译,但未显示任何输出,输出屏幕在扫描字符串后一直关闭。是否存在逻辑错误或我的编译器是否存在问题(顺便说一句,我使用的是 devc++ 编译器)。任何形式的帮助将不胜感激

int main()
{
char str1[100];
scanf("%s",&str1);
int len = strlen(str1);
int m;
for (m=0;m<=len;){
if (&str1[m]==" "){
m++;
}
else {
printf("%c",&str1[m]);
}
m++;
}
return 0;
}

编辑:对 m=1 的错误感到抱歉,我只是在检查我的编译器是否有效,只是碰巧粘贴了该代码

最佳答案

您的代码包含很多问题,您描述的行为很可能不是因为编译器中的错误:-)

一些问题:

使用 scanf("%s",str1)而不是 scanf("%s",&str1) .自 str1被定义为字符数组,它会根据需要自动衰减到指向 char 的指针。

请注意 scanf("%s",str1)永远不会读入任何空白,因为 "%s"被定义为跳过前导空格并在检测到第一个空格时停止读入。

for (m=1;m<=len;)连同 str1[m] ,请注意 C 中的数组使用从零开始的索引,即 str1[0]..str1[len-1] , 这样 m <= len超出数组边界。使用 for (m=0;m<len;)相反。

表达式 &str1[m]==" "从类型的角度来看是正确的,但在语义上是无稽之谈。您正在比较 m 的内存地址带有字符串文字内存地址的第 th 个字符 " " .使用 str1[m]==' '相反,请注意表示字符值的单引号而不是表示字符串文字的双引号。

声明printf("%c",&str1[m])将字符的内存地址而不是预期的字符值本身传递给 printf。使用 printf("%c",str1[m])相反。

希望我找到了一切。更正这些事情,打开编译器警告,并尝试取得成功。如果您遇到更多麻烦,请不要犹豫,再次询问。

希望对C语言的体验有所帮助,祝你好运:-)

关于c - 删除字符串中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45217669/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com