关于去除字符串的空格符的一个问题

C语言 码拜 9年前 (2016-04-08) 861次浏览
int trimSpace(char *str,char *newstr)
{
char *p=str;
int ncount=0;
int i,j=0;
if(str==NULL||newstr==NULL)
{
return -1;
}
i=0;
j=strlen(p)-1;
while(isspace(p[i])&&p[i]!=”\0″)
{
i++;
}
while(isspace(p[j])&&p[j]!=”\0″)
{
j–;
}
ncount=j-i+1;
strncpy(newstr,str+j,ncount);
newstr[ncount]=”\0″;
在教程中他有这么一个函数,在最后的时候这两个本人一直不能理解。
1.strncpy(newstr,str+j,ncount);这个中str+i和str+j有什么区别,还有就是为什么这里要加i不是就是把str这个里面的元素按ncount复制到新的netstr里面吗?
2.newstr[ncount]=”\0″;这个有什么作用本人也不是太明白。
求指导答,谢谢。
解决方案

80

1.strncpy(newstr,str+j,ncount);这句有问题,应该是strncpy(newstr,str+i,ncount);才对
2.newstr[ncount]=”\0″这句就是在新字符串的末尾补上”\0″,不补”\0″的话输出的时候可能越界崩溃
PS:i是从前往后遍历,第一个不是空格的下标位置,而j是从后往前第一个不是空格的下标位置

#include<stdio.h>
#include<string.h>
#include <ctype.h>
int trimSpace(char *str,char *newstr)
{
	char *p=str;
	int ncount=0;
	int i,j=0;
	if(str==NULL||newstr==NULL)
	{
		return -1;
	}
	i=0;
	j=strlen(p)-1;
	while(isspace(p[i])&&p[i]!="\0")
	{
		i++;
	}
	while(isspace(p[j])&&p[j]!="\0")
	{
		j--;
	}
	ncount=j-i+1;
	strncpy(newstr,str+i,ncount);
	newstr[ncount]="\0";
}
void main()
{
	char *a = "  sfdsf  ";
	char buffer[32] = {0};
	trimSpace(a, buffer);
	printf("%s\n", buffer);
}

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于去除字符串的空格符的一个问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)