C++中字符串左右的空格怎么去除?

zzzzz_12345 2009-05-21 12:40:19
例如:
“ qwe rt ”变为“qwe rt”
...全文
4445 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
寂静之颠 2012-07-17
  • 打赏
  • 举报
回复
//以下为测试过的正确代码,而且能处理字符串全空的情况

void remove_space(string &str)
{
int f_loc = str.find_first_not_of(' ');
int l_loc = 0;
if(f_loc != -1)
{
l_loc = str.find_last_not_of(' ');
str=str.substr(f_loc,l_loc-f_loc +1);
}
else
{
str="";
}
}
bitsjx 2009-05-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lori227 的回复:]
C/C++ codestringstr="qwe rt";
str=str.substr(1, str.size()-1);
[/Quote]
顶!
曾经不知道这种用法,竟然傻乎乎的自己去写了一个函数!
Sou2012 2009-05-22
  • 打赏
  • 举报
回复
UP..
FengRider 2009-05-22
  • 打赏
  • 举报
回复
不好意思,更正一下,f函数中的循环条件应该是:*str == ' ',而不是*str != '',下面是完整的修正过来的函数:

char * f (char * str)
{
int nSize = strlen(str);
char * p = &str[nSize-1];
while(*p == ' ')
{
*p = '\0';
p--;
}
return str;
}
FengRider 2009-05-22
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 zzzzz_12345 的回复:]
得用上char*f(char*str)
[/Quote]
如果说只要去取str右边的空格的话,可以这样来做:

char * f (char * str)
{
char * p = &str[strlen(str)-1];
while(*str != ' ')
{
*p = '\0';
p--;
}
return str;
}

楼主,我想上述函数应该合你的要求吧。不过此处切记传入参数str不能为常量字符串,即不可以是这样的:char * str = " qwe rt ";这个表达式说明str指向的是一个常量字符串首地址,而常量字符串的内容是不可以被修改的。只有在栈区的字符串才可以被重新赋值。
例如:char strbuf[1024] = {0}; //在栈里面开辟一个字符串空间。
sprintf(strbuf,"%s"," qwe rt ");
char * str = strbuf; //定义一个字符指针,让其指向存放在栈中间的一个字符串首地址。
f(str); //这样str保存的字符串就成了" qwe rt"
zzzzz_12345 2009-05-22
  • 打赏
  • 举报
回复
O(∩_∩)O谢谢~!
zzzzz_12345 2009-05-22
  • 打赏
  • 举报
回复
O(∩_∩)O谢谢大家~!
xiaoshi935 2009-05-22
  • 打赏
  • 举报
回复
find_first_not_of()函数:

在字符串中查找第一个与str中的字符都不匹配的字符,返回它的位置。搜索从index开始。如果没找到就返回string::nops
在字符串中查找第一个与str中的字符都不匹配的字符,返回它的位置。搜索从index开始,最多查找num个字符。如果没找到就返回string::nops
在字符串中查找第一个与ch不匹配的字符,返回它的位置。搜索从index开始。如果没找到就返回string::nops

find_first_of()函数:

查找在字符串中第一个与str中的某个字符匹配的字符,返回它的位置。搜索从index开始,如果没找到就返回string::npos
查找在字符串中第一个与str中的某个字符匹配的字符,返回它的位置。搜索从index开始,最多搜索num个字符。如果没找到就返回string::npos,
查找在字符串中第一个与ch匹配的字符,返回它的位置。搜索从index开始。

find_last_not_of()函数:

在字符串中查找最后一个与str中的字符都不匹配的字符,返回它的位置。搜索从index开始。如果没找到就返回string::nops
在字符串中查找最后一个与str中的字符都不匹配的字符,返回它的位置。搜索从index开始,最多查找num个字符如果没找到就返回string::nops
在字符串中查找最后一个与ch不匹配的字符,返回它的位置。搜索从index开始。如果没找到就返回string::nops

find_last_of()函数:

在字符串中查找最后一个与str中的某个字符匹配的字符,返回它的位置。搜索从index开始。如果没找到就返回string::nops
在字符串中查找最后一个与str中的某个字符匹配的字符,返回它的位置。搜索从index开始,最多搜索num个字符。如果没找到就返回string::nops
在字符串中查找最后一个与ch匹配的字符,返回它的位置。搜索从index开始。如果没找到就返回string::nops

前面这几个函数可以看看,下面这段代码仅供参考:

#include <iostream>
#include <string>
using namespace std;

int main () {
string str = " qwe rt ";
cout << str << endl;
cout <<str.substr(str.find_first_not_of(' '),str.size()) << endl;
}

zzzzz_12345 2009-05-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 liberright 的回复:]
。。。你直接写个string对象的转换函数不久好了
[/Quote]

这个不大明白
zzzzz_12345 2009-05-21
  • 打赏
  • 举报
回复
什么意思不大明白,请问可以找找第一个不是空格的,再从最后一个字符串找找第一个不是空格的。
不知道这样行的通吗?
我编不对。
zzzzz_12345 2009-05-21
  • 打赏
  • 举报
回复
得用上char*f(char*str)
liberright 2009-05-21
  • 打赏
  • 举报
回复
。。。你直接写个string对象的转换函数不久好了
ZLL5267 2009-05-21
  • 打赏
  • 举报
回复
std::cout<<s.substr(s.find_first_not_of(' '),s.find_last_not_of(' ')-1);
孙晓军82 2009-05-21
  • 打赏
  • 举报
回复
//优点:被trim的字符串和trim完成后的字符串已经是完全不同的串.被trim串的生命周期和改动不会影响新字符串.
//如果被trim的字符串都不是很长的话.也可以考虑在原有串基础上动手脚,优点是节省了存储空间.
char* Trim(char* str)
{
int len = strlen(str);
int i = 0;
int j = 1;
while (*(str + i) == ' ')
{
i++;
}
while (*(str + len - j) == ' ')
{
j++;
}
len = len - i - j + 1;
char* newStr = new char[len + 1];
for (int p = 0; p < len; p++)
{
*(newStr + p) = *(str + i + p);
}
newStr[len] = '\0';
return newStr;
}
hjjdebug 2009-05-21
  • 打赏
  • 举报
回复

int main ( int argc, char *argv[] )
{
string s1=" this is a test ";
string s2;
s2=s1.substr(s1.find_first_not_of(' '),s1.find_last_not_of(' '));
cout << s2 <<endl;
system("pause");
return 0;
}

crst_zh 2009-05-21
  • 打赏
  • 举报
回复
trimleft,trimright
wwoo_1105 2009-05-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lori227 的回复:]
C/C++ code
string str = " qwe rt ";
str = str.substr(1, str.size()- 1);
[/Quote]

如果前后空格不只是一个的话就不行了
T技术沙龙 2009-05-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lori227 的回复:]
C/C++ code
string str = " qwe rt ";
str = str.substr(1, str.size()- 1);
[/Quote]
这个方法比我的好,学习了
lori227 2009-05-21
  • 打赏
  • 举报
回复

string str = " qwe rt ";
str = str.substr(1, str.size()- 1);
amossavez 2009-05-21
  • 打赏
  • 举报
回复
用find_first_of和find_last_of分别找到第一个和最后一个空格,在delete就行了
加载更多回复(8)

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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