程序需求:有一个首地址为string的字符串 ,剔除string中所有的空格字符。请从字符串最后一个字符开始逐个向前判断、并进行处理。
编程思路:假设串以0作为结束标志,从右向左扫描,遇到空格后, 将其后的所有字符向前移动一个位置,直到该字符为止。 由于串长是动态变化的,所以需要设置三个指针,tailP指向串尾, 扫描用的指针scanP,及移动时用的指针moveP。汇编中esi==scanP,edi==tailP,ebx==moveP。
开发环境
Win10 + VS2017
C语言代码实现如下:
#include <stdio.h>
#include <string.h>
char string[] = "hello world ni hao shi jie!";
int main()
{
int scanP, tailP;
scanP = tailP = strlen(string);
while (scanP >= 0)
{
if (string[scanP] == ' ')
{
for (int i = scanP; i < tailP; i++)
{
string[i] = string[i + 1];
}
tailP--;
}
scanP--;
}
printf("%s\n", string);
return 0;
}