【发布时间】:2013-12-12 00:56:13
【问题描述】:
这个应该比较简单。 我有一个看起来像这样的字符串/字符指针
" 1001"
注意 1 之前的空格。如何删除这个空格,同时仍然保留它之后的整数(不转换为字符或其他东西)?
【问题讨论】:
-
不太明白你在问什么。要将字符串转换为二进制,还是保留字符串并删除空格?
这个应该比较简单。 我有一个看起来像这样的字符串/字符指针
" 1001"
注意 1 之前的空格。如何删除这个空格,同时仍然保留它之后的整数(不转换为字符或其他东西)?
【问题讨论】:
最简单的答案是:
char *str = " 1001";
char *p = str+1; // this is what you need
【讨论】:
如果空格在字符串的开头,也可以。
char *str = " 1001";
char c[5];
sscanf(str,"%s",c);
printf("%s\n",c);
%s 将忽略缓冲区开头的第一个空格。
【讨论】:
这里有一个解决方案:How to remove all occurrences of a given character from string in C?
我建议通过使用您想要的字符创建一个新字符串来删除空格字符或任何字符。
您似乎没有分配内存,因此您不必担心让旧字符串死亡。
【讨论】:
如果是字符指针,我相信
char* new = &(old++);
应该做的伎俩
【讨论】:
我猜你是从标准输入读取一个整数的字符串表示形式,并想去掉空格?如果你不能使用上面的其他技巧和指针,并且确实需要修改内存,请使用以下函数。
您也可以使用 sprintf 来完成工作。
我确信有更有效的方法来修剪字符串。这里只是一个例子。
void trim(unsigned char * str)
{
trim_front(str);
trim_back(str);
}
void trim_front(unsigned char * str)
{
int i = 0;
int index = 0;
int length = strlen(str);
while(index < length && (str[index] == ' ' || str[index] == '\t' || str[index] == '\n'))
{
index++;
}
while(index < length)
{
str[i] = str[index];
i++;
index++;
}
}
void trim_back(unsigned char * str)
{
int i;
for(i = 0; str[i] != ' ' && str[i] != '\n' && str[i] != '\t' && str[i] != '\0'; i++);
str[i] = '\0';
}
【讨论】: