我有我的字符数组,它的最大大小是1024。不管怎样,它包含一个200个字符的字符串。我想从这200个字符的字符串中删除前80个字符。我该怎么做呢?
char my_array[1024];
for(int i = 80; i < sizeof(my_array); i+=1)
{
my_array[i-80] = my_array[i];
}
我试过这个,但它不起作用。你知道什么解决办法吗?谢谢大家的帮助!
使用标准C字符串函数memmove
。例如
#include <string.h>
//...
memmove( my_array, my_array + 80, strlen( my_array ) - 79 );
幻数79
表示您需要复制字符串中除80
字符外的所有字符,但包括终止零字符' '
。
您需要保证数组确实包含一个字符串,并且存储的字符串的长度(strlen( my_array )
)不少于80
。
例如
size_t n = strlen( my_array );
if ( !( 80 < n ) )
{
myarray[0] = ' ';
}
else
{
memmove( my_array, my_array + 80, n - 79 );
}
下面是一个演示程序,从存储在字符数组中的字符串中删除前7个字符。
#include <string.h>
#include <stdio.h>
int main( void )
{
char s[] = "Hello World";
size_t n = 6;
puts( s );
memmove( s, s + n, strlen( s ) - n + 1 );
puts( s );
}
程序输出为
Hello World
World
不是改变数组,你可以,根据你的需要,只是创建一个指针指向原始字符串的第81个char
,这个指针现在指向一个字符串,其中80个char
被删除。下面是一个更短的例子,只删除了10个char
。
int main(void)
{
char orig[]="This is a long string";
char *s=orig+10;
puts(s);
return 0;
}
打印
long string
字符计数问题:
您说要删除字符。char
与字符不同,字符不容易定义,也难以计数。首先,您必须知道编码和CHAR_BIT
的值。您很可能会使用UTF-8和CHAR_BIT==8
。计算代码点相对容易,只需计算表示代码点开始的char
s(第7位为0或设置了第6位)。但是事情变得复杂了。您需要注意组合字符,这些字符是与其他代码点组合以创建单个字符的代码点。这也更加困难,因为根据上下文,角色不能组合。然后你需要定义如何计数。例如,在韩语中,多个简单的"字符";可以组合成单个"字符"。把它们放在一个正方形里,怎么数呢?(免责声明:我不懂韩语,也不太明白韩语是怎么用的。)
计算字符超出了这个答案,我只是想告诉你"删除80个字符";不容易定义