C语言问题:整理字符串
整理字符串,将字符串的前导空白符和后随空白符删去,并将字符串中非空白字符之间的连续的多个空白符只保留一个,而去掉多余的空白符.求C代码!或者告诉算法也可以!求高手指点!...
整理字符串,将字符串的前导空白符和后随空白符删去,并将字符串中非空白字符之间的连续的多个空白符只保留一个,而去掉多余的空白符.
求C代码!或者告诉算法也可以!求高手指点! 展开
求C代码!或者告诉算法也可以!求高手指点! 展开
1个回答
展开全部
基本思路:
使用标准库中的strtok函数分离字符串中除空白符外的各个子字符串,再用strcpy和strcat进行连接。
范例:(Dev-C++调试通过)
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
char source[] = "\t A string\tof ,,tokens\nand some more tokens"; // 测试用字符串
char seps[] = " ,\t\n"; // 空白字符的种类可以任意添加
int stringToken(char* src, char* res) // 字符串处理函数
{
/* 在函数使用前,必须确保src和res均为合法指针
** src: [in] 源字符串
** res: [out] 结果字符串
*/
*res = '\0';
char *token = NULL;
token = strtok( src, seps ); // 取第一个子串
while( token != NULL ) // 源字符串如果未结束
{
strcat( res, token );
strcat( res, " " );
token = strtok( NULL, seps ); // 取下一个子串
}
res[strlen(res)-1]='\0'; // 去除尾部空格
return 0;
}
int main( void )
{
char* result = (char*)malloc( 256 * sizeof(char) ); // 为指针申请空间
stringToken( source, result );
printf( "%s", result );
free(result); result = NULL; // 销毁指针
system("pause");
return 0;
}
使用标准库中的strtok函数分离字符串中除空白符外的各个子字符串,再用strcpy和strcat进行连接。
范例:(Dev-C++调试通过)
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
char source[] = "\t A string\tof ,,tokens\nand some more tokens"; // 测试用字符串
char seps[] = " ,\t\n"; // 空白字符的种类可以任意添加
int stringToken(char* src, char* res) // 字符串处理函数
{
/* 在函数使用前,必须确保src和res均为合法指针
** src: [in] 源字符串
** res: [out] 结果字符串
*/
*res = '\0';
char *token = NULL;
token = strtok( src, seps ); // 取第一个子串
while( token != NULL ) // 源字符串如果未结束
{
strcat( res, token );
strcat( res, " " );
token = strtok( NULL, seps ); // 取下一个子串
}
res[strlen(res)-1]='\0'; // 去除尾部空格
return 0;
}
int main( void )
{
char* result = (char*)malloc( 256 * sizeof(char) ); // 为指针申请空间
stringToken( source, result );
printf( "%s", result );
free(result); result = NULL; // 销毁指针
system("pause");
return 0;
}
追问
嗯十分感谢!不过我在Mircrosoft visual c++上测试有一个错误……怎么也看不出,而且我指针不大会用,能再帮忙看看么?要是实在麻烦就算了,我会采纳您的答案的。
追答
我的VisualStudio2010旗舰版调试通过,没问题。
如果你用的是VC6,建议换版本,或者至少到微软官方下载VC6的SP1和SP2依次安装。原版bug太多了。或者直接用小巧的Dev-C++或者其他支持gcc编译器的编程工具,对标准C/C++支持比较好。
另,中文汉化的VC6建议不要用。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询