50分求教去掉字符串前后空格的问题。

kouken 2003-10-15 03:07:40
如何截掉一个全角字符和半角字符混排的字符串的前后空格?
...全文
424 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
kouken 2003-10-23
  • 打赏
  • 举报
回复
不好意思,给点分数大家意思意思,接分
busybird 2003-10-22
  • 打赏
  • 举报
回复
trim函数
River_H 2003-10-22
  • 打赏
  • 举报
回复
修正上面代码的一些小问题。经过测试的代码如下:

void DoIt(char *pString)
{
int nIsSpace, nCount;
unsigned char* pWork;

if (pString == NULL || pString[0] == 0)
{
return;
}

// 第一遍去掉后面的空格,第二遍去掉前面的空格
for (nCount = 0; nCount < 2; nCount++)
{
// 将字符串反转
pString = strrev(pString);
pWork = (unsigned char*)pString;

// 去掉前面的空格
do
{
// 结束
if (*pWork == 0)
{
nIsSpace = 0;
}
// 全角空格
else if (*pWork == 0xa1)
{
if (*(pWork+1) == 0)
{
nIsSpace = 0;
}
else if (*(pWork+1)== 0xa1)
{
nIsSpace = 1;
pWork += 2;
}
}
// 半角空格
else
{
if (*pWork == 0x20)
{
nIsSpace = 1;
pWork += 1;
}
else
nIsSpace = 0;
}
} while (nIsSpace == 1);

//
if (pWork != (unsigned char*)pString)
{
strcpy(pString, (char*)pWork);
}
}
}
River_H 2003-10-22
  • 打赏
  • 举报
回复
还没有搞定?给你写一个函数。如下:

void DoIt(char *pString)
{
int nIsSpace,nCount;
unsigned char* pWork;

if (pString == NULL || pString[0] == 0)
{
return;
}

// 第一遍去掉后面的空格,第二遍去掉前面的空格
for (nCount = 0; nCount < 2; nCount++)
{
// 将字符串反转
pString = strrev(pString);
pWork = pString;

// 去掉前面的空格
do
{
// 结束
if (*pWork == 0)
{
nIsSpace = 0;
}
// 全角空格
else if (*pWork == 0xa1)
{
if (*(pWork+1) == 0)
{
nIsSpace = 0;
}
else if (*(pWork+1)== 0xa1)
{
nIsSpace = 1;
pWork += 2;
}
}
// 半角空格
else
{
if (*pWork == 0x20)
nIsSpace = 1;
else
nIsSpace = 0;

pWork += 1;
}
} while (nIsSpace == 1);

//
if (pWork != pString)
{
strcpy(pString, pWork);
}
}
}
minghui000 2003-10-15
  • 打赏
  • 举报
回复
iswspace()

isspace()
smokefire 2003-10-15
  • 打赏
  • 举报
回复
用iswspace()和isspace()判断看看
kouken 2003-10-15
  • 打赏
  • 举报
回复
不晕
因为s[i]永远不会等于全角的空格,不相信你试试,当全角空格和
半角空格同时存在时光用s[i] != ' '和s[i] != ' '是解决不了问题的,
当全角空格和半角空格同时存在时问题的关键是怎样去区分全角空格和半角空格
smokefire 2003-10-15
  • 打赏
  • 举报
回复
s[i] != ' '
你把' '和' '都考虑进去不就玩了?
kouken 2003-10-15
  • 打赏
  • 举报
回复
Tangyongkang(匆匆)
你只能去掉半角空格,我说的全角半角混排当然也有全角空格和半角空格咯
smokefire 2003-10-15
  • 打赏
  • 举报
回复
isspace函数应该有全角的版本阿 你去找找
lyr311 2003-10-15
  • 打赏
  • 举报
回复
Mark!
Tangyongkang 2003-10-15
  • 打赏
  • 举报
回复
// Let Me Try
// By C

char *Trim(char *s)
{
int i,j;

'去掉后面的空格
for ( j = strlen(s); s[j] != ' ' ; j--)

s[j] = '\0';

'去掉前面的空格
for ( i = 0 ; s[i] != ' ' ; i++);
s = &s[i];

return s

}//End



}
kouken 2003-10-15
  • 打赏
  • 举报
回复
如果只有全角或只有半角会比较好办一点,但是混排的话,我不知道如何判断哪个字符要占两个字节,哪个字符只占一个字节
kouken 2003-10-15
  • 打赏
  • 举报
回复
我用的标准C
AManWanttoMarriage 2003-10-15
  • 打赏
  • 举报
回复
你使用的是String类吗?它里面有很多函数(接口),利用这些接口编一个函数就好了,如find(),mid()start()end()之类
smokefire 2003-10-15
  • 打赏
  • 举报
回复
这个没有考虑全角,但是应该好办吧
smokefire 2003-10-15
  • 打赏
  • 举报
回复
//去除后置空格函数
void strclearb(char *str)
{
while(isspace(str[strlen(str)-1]))
{
str[strlen(str)-1]=0;
}

}

//字符串倒装函数
void strbtof(char *str)
{
char tmpc ;
int j=strlen(str);
for(int i=0;i<j/2;i++)
{
tmpc=str[i];
str[i]=str[j-i-1];
str[j-i-1]=tmpc;
}
}

//去除前面空格函数
void strclearf(char *str)
{
strbtof(str);
strclearb(str);
strbtof(str);
}
langzi8818 2003-10-15
  • 打赏
  • 举报
回复
upxia
davidwoo 2003-10-15
  • 打赏
  • 举报
回复
循环去掉'\0'后的所有内容
Wolf0403 2003-10-15
  • 打赏
  • 举报
回复
全角字符的空格不是 '\20' 吗?偶不知道的说~
加载更多回复(1)

69,335

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧