分享一下我做计算机二级C语言遇到的程序设计题以及我的思路与标准答案的不同理解
不喜欢的勿喷,希望可以帮到需要帮助的同学
既然要把字符串中的空格都删除,我的理解很简单,就是每当遇到空格的时候,就去遍历空格之后的其余字符,如果遍历到了既不是空格也不是\0的字符,就把这个字符移到前面空格的位置,然后使这个字符原本的位置为空
所以我一开始循环遍历整个字符串,直到遇见空格,把空格的位置记下来,然后接着从这个位置的下一个位置开始重新循环遍历,直到遇见符合条件的字符移到一开始记住位置的空格位置,然后此位置为空,然后break结束本次的循环,剩余的字符依次类推
我的这个方法用了两次for循环,整体来说时间复杂度肯定是较为不理想的
不喜欢我的代码的可以看一看答案较为简单的思路
答案的代码运用了指针,然后是直接覆盖的方法,思路较优,指针学的好的程序员们优先掌握这个方法,又简单思路又清晰,我不得不承认我的指针这块学的不扎实了
指针思路的代码块:
void fun (char *str)
{
int i=0;
char *p=str;
while(*p)
{
if(*p!=' ')
{
str[i]=*p;
i++;
}
p++;
}
str[i]='\0';
}
以下是以我的双循环遍历思路代码块为基础的总代码:
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <stdlib.h>
void fun (char *str)
{
int i, j, len = strlen(str);
for (i = 0; str[i] != '\0'; i++)
{
if (str[i] == ' ')
{
for (j = i + 1; j < len; j++)
{
if (str[j] != ' ' && str[j] != '\0')
{
str[i] = str[j];
str[j] = ' ';
break;
}
}
}
}
}
void main()
{
char str[81];
char Msg[]="Input a string:";
int n;
FILE *out;
printf(Msg);
gets(str);
puts(str);
fun(str);
printf("*** str: %s\n",str);
}
运行结果: