C删除第一个和最后一个元素

时间:2012-10-08 22:48:05

标签: c

我有一个数组(基于C语言),char eItem[32]

对于每个“i”,加载这些值:

{ WADMIN, WADMIN, WADMIN, WADMIN, PALA, PALA, PALA, PALA }

现在,我编写了这段代码来删除每个值的第一个和最后一个元素。

for ( i = 0; i <= 7; i++ ) {
    // code to get values
    k = strlen( eItem );
    eItem[k - 1] = "";
    eitem[0] = "";
    printf( eItem );
}

很简单,但它不起作用。怎么样?

3 个答案:

答案 0 :(得分:0)

您将字符串分配给字符串(字符)的单个元素。相反,您需要使用单引号分配一个字符。例如,在单词的前面和末尾加上一个空格,这就是你似乎想要做的事情:

eItem[k-1]=' ';
eItem[0]=' ';

但实际上,您可以通过将单独的字符指针指向字符串中的第二个字符来截断字符串,并通过添加NULL字节在末尾截断:

eItem[k-1]='\0';
char * truncated_eItem = eItem + 1;

请记住,+1表示它指向内存下游的地址1 * sizeof(char)

答案 1 :(得分:0)

eItem = eItem+1;
eItem[strlen(eItem)-1] = 0;

答案 2 :(得分:0)

玛丽安,

请完成以下目的的实施。它应该合理地工作。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main()
{
  const char *src_strings[]={"WADMIN", "WADMIN", "WADMIN", "WADMIN", "PALA", "PALA", "PALA", "PALA"}; //source array of char pointers
  char *dest_strings[8]; //Destination array of character pointers
  int string_count,length,cindex;

  printf("Modified Strings\n");
  printf("================\n");

  //Traverse through the strings in the source array
  for(string_count=0;string_count<8; string_count++) 
  {
    //Compute the lenght and dynamically allocate the
    //required bytes for the destination array
    length=strlen(src_strings[string_count]);
    dest_strings[string_count]= (char*)malloc(sizeof(length-1));

    //Copy characters to destination array except first and last
    for(cindex=1; cindex<length-1; cindex++)
    {
       *(dest_strings[string_count]+cindex-1)=*(src_strings[string_count]+cindex);
    }

    //Append null character
    *(dest_strings[string_count]+cindex)='\0';
    printf("%s\n",dest_strings[string_count]);

    //Free memory as it is not needed
    free(dest_strings[string_count]);

  }
  return 0;
}

样本输出

Modified Strings
================
ADMI
ADMI
ADMI
ADMI
AL
AL
AL
AL