首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

,用C语言编写一个trim函数,现在思维混乱.

2013-01-28 
求救,用C语言编写一个trim函数,现在思维混乱...函数要求:输入一组单词数组(前后可能有空格)第一个函数:去

求救,用C语言编写一个trim函数,现在思维混乱...
函数要求:
输入一组单词数组(前后可能有空格)
第一个函数:去掉单词的前后空格,tab键和换行符 Trim(char oldWord[], char newWord[])
第二个函数:单词内部有空格,分解成多个单词 Seg(char words[], char wArray[][100] ) 假设单词内部只有一个空格,没有两个连续空格的情况发生。

求救!! 
[解决办法]
http://download.csdn.net/detail/makepaper/376300
[解决办法]

// 删除字符串前后空白
string strTrim(string& str)
{
    str = str.substr(str.find_first_not_of("\t \n"));
    str = str.substr(0, str.find_last_not_of("\t \n") + 1);
    return str;
}

[解决办法]
#include <iostream>
#include <string>
#include <cstring>

using namespace std;

// 删除字符串前后空白
string strTrim(string& str)
{
    str = str.substr(str.find_first_not_of("\t \n"));        // 查找非空白处获取子串
    str = str.substr(0, str.find_last_not_of("\t \n") + 1);  // 找最后一个非空白处获取子串
    return str;
}

char* csTrim(char* cs)
{
    char* ret = cs;
    char* pc = new char[strlen(cs) + 1];

    int pos = strspn(cs , "\t \n");     // 查找非空白处pos
    strcpy(pc , cs + pos);
    _strrev(pc);                        // 反序字符串
    pos = strspn(pc , "\t \n");         // 原来后面的空白,就变成了前面的空白
    strcpy(cs , pc + pos);
    _strrev(cs);                        // 再反序,还原回来

    delete[] pc;
    return ret;
}
// strcspn strspn strpbrk
int main()
{
    string str = " \t \n  你好世界!  \t \n ";
    char cs[] =  " \t \n  你好世界!  \t \n ";

    cout << strTrim(str)  << csTrim(cs) << endl;
    return 0;
}

[解决办法]
// VC6.0 的_strrev 的源码 _strrev 不是标准库,所以可以应急自己写一个
char* cs_strrev(char* string)
{
    char* start = string;
    char* left = string;
    char ch;

    while (*string++) // 找到string 末位的'\0',
        ;             // 因为上面 string++,实际指针在 '\0'的后一个


    string -= 2;      // 所以退2格,回到字符串最后一个字母
    while (left < string) {
        ch = *left;    // 通过临时变量 ch 进行交换
        *left++ = *string;
        *string-- = ch;
    }
    return(start);
}

char* csTrim(char* cs)
{
    char* ret = cs;
    char* pc = new char[strlen(cs) + 1];

    int pos = strspn(cs , "\t \n");     // 查找非空白处pos
    strcpy(pc , cs + pos);
    cs_strrev(pc);                        // 反序字符串
    pos = strspn(pc , "\t \n");         // 原来后面的空白,就变成了前面的空白
    strcpy(cs , pc + pos);
    cs_strrev(cs);                        // 再反序,还原回来

    delete[] pc;
    return ret;
}

热点排行