如何去掉String的前后空格或某些字符

#import <Foundation/Foundation.h>

@interface NSString (TrimmingAdditions)

/**
 *  去掉字符串左边的特定字符
 *
 *  @param characterSet 需要去除的特定字符集
 *
 *  @return 去除后的字符串
 */
- (NSString *)stringByTrimmingLeftCharactersInSet:(NSCharacterSet *)characterSet;

/**
 *  去掉字符串右边的特定字符
 *
 *  @param characterSet 需要去除的特定字符集
 *
 *  @return 去除后的字符串
 */
- (NSString *)stringByTrimmingRightCharactersInSet:(NSCharacterSet *)characterSet;

@end


@implementation NSString (TrimmingAdditions)

- (NSString *)stringByTrimmingLeftCharactersInSet:(NSCharacterSet *)characterSet {
    NSUInteger location = 0;
    NSUInteger length = [self length];
    unichar charBuffer[length];
    //This method is unsafe because it could potentially cause buffer overruns.
    //[self getCharacters:charBuffer];
    [self getCharacters:charBuffer range:NSMakeRange(location, length)];
    for (location = 0; location < length; location++) {
        // charBuffer[i] 是 字符对应的ASCII值
        //DLog(@"charBuffer = %hu", charBuffer[location]);
        if (![characterSet characterIsMember:charBuffer[location]]) {
            break;
        }
    }
    return [self substringWithRange:NSMakeRange(location, length - location)];
}

- (NSString *)stringByTrimmingRightCharactersInSet:(NSCharacterSet *)characterSet {
    NSUInteger location = 0;
    NSUInteger length = [self length];
    unichar charBuffer[length];
    //[self getCharacters:charBuffer];
    [self getCharacters:charBuffer range:NSMakeRange(location, length)];
    for (length = [self length]; length > 0; length--) {
        if (![characterSet characterIsMember:charBuffer[length - 1]]) {
            break ;
        }
    }
    return [self substringWithRange:NSMakeRange(location, length - location)];
}

@end



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用string对象的成员函数erase和find_first_not_of来实现删除字符串前后空格字符。 具体步骤如下: 1. 使用find_first_not_of函数找到第一个非空格字符的位置,即字符串前面的空格字符的位置。 2. 使用erase函数删除字符串前面的空格字符。 3. 使用find_last_not_of函数找到最后一个非空格字符的位置,即字符串后面的空格字符的位置。 4. 使用erase函数删除字符串后面的空格字符。 示例代码如下: ```c++ #include <iostream> #include <string> using namespace std; string trim(string str) { // 删除字符串前面的空格字符 str.erase(, str.find_first_not_of(" ")); // 删除字符串后面的空格字符 str.erase(str.find_last_not_of(" ") + 1); return str; } int main() { string str = " hello world "; cout << "原始字符串:" << str << endl; str = trim(str); cout << "删除前后空格字符后的字符串:" << str << endl; return ; } ``` 输出结果为: ``` 原始字符串: hello world 删除前后空格字符后的字符串:hello world ``` ### 回答2: 字符串是程序中常用的数据类型,而在处理字符串时,其中的空格字符常常会影响程序的逻辑判断和处理结果。所以,我们需要一个方便的方法来删除字符串中的前后空格,那么如何通过string对象实现呢? 首先,我们需要了解string类中的成员函数和操作符,其中包括: 1. string::size():返回字符串的大小; 2. string::find_first_not_of():返回字符串中第一个不是待查字符的位置; 3. string::find_last_not_of():返回字符串中最后一个不是待查字符的位置; 4. string::substr():返回从指定位置开始的子字符串; 5. string::erase():删除从指定位置开始的字符。 接下来,我们可以通过以下步骤来实现删除字符串前后空格字符: 1. 使用string::find_first_not_of()函数查找字符串中第一个不是空格字符的位置,并记录该位置; 2. 使用string::find_last_not_of()函数查找字符串中最后一个不是空格字符的位置,并记录该位置; 3. 使用string::substr()函数从记录的第一个位置开始,截取到最后一个位置的子字符串,即为删除前后空格字符后的字符串。 例如,假设我们要删除字符串str中的前后空格字符,具体实现代码如下: ``` string str = " This is a test string. "; // 删除前空格字符 string::size_type pos = str.find_first_not_of(" "); if (pos != string::npos) { str = str.substr(pos); } // 删除后空格字符 pos = str.find_last_not_of(" "); if (pos != string::npos) { str = str.substr(0, pos + 1); } cout << str << endl; // 输出结果:This is a test string. ``` 通过上述代码,我们成功地利用了string对象来删除字符串前后的空格字符,实现了字符串处理的功能。 ### 回答3: 我们可以使用 string 类的成员函数 erase 和 find_first_not_of 实现删除字符串前后空格字符。 以下是代码示例: ```C++ #include <iostream> #include <string> using namespace std; int main() { string str = " Hello, World! "; int pos1 = str.find_first_not_of(" "); // 查找第一个非空格字符的位置 int pos2 = str.find_last_not_of(" "); // 查找最后一个非空格字符的位置 str.erase(0, pos1); // 删除前面的空格字符 str.erase(pos2 - pos1 + 1); // 删除后面的空格字符 cout << str << endl; return 0; } ``` 输出结果为: ``` Hello, World! ``` 首先,我们定义了一个字符串 str,其中包含前后多余的空格字符。我们使用 find_first_not_of 函数查找第一个非空格字符的位置,使用 find_last_not_of 函数查找最后一个非空格字符的位置。然后,我们使用 erase 函数删除前面的空格字符和后面的空格字符。 需要注意的是,如果字符串中只包含空格字符,则 find_first_not_of 函数返回 string::npos,表示未找到非空格字符。在这种情况下,我们不需要删除任何字符

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值