如何在字符串中从头到尾移动char

时间:2012-09-21 14:37:55

标签: c pointers

正如标题所说,在我的程序中,我(在许多程序之后)获得了标记化的单词。 不幸的是,由于它们被反转,它们在一个单词的开头保留标点字符,例如。 ,驼鹿

如何将,从开头移到最后 - >驼鹿,

到目前为止,我已尝试过(ptrchar *):

temp = strdup(ptr);
temp = &ptr[0];
ptr[0] = ptr[1];
ptr[strlen(ptr)-1] = temp;
free(temp);

但这给了我错误:

  

赋值从整数中生成没有强制转换的指针

     

警告:赋值在没有强制转换的情况下从指针生成整数

如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

这样的事情:

void swap_last(char *str)
{
  const size_t len = strlen(str);
  if(len > 1)
  {
    const char   first = str[0];
    memmove(str, str + 1, len - 1);
    str[len - 1] = first;
  }
}

请注意,上述内容假定str有效。

答案 1 :(得分:3)

通常,逗号应该是它自己的标记,因此在标记化后解析它会在第一个之后放置第二个标记化器。

最好的解决方案是不在空格上分割,而是将逗号识别为它自己的标记,这样你就可以测试逗号的存在作为语法的一部分。

答案 2 :(得分:1)

检查您的代码并推断其缺少类型,很难知道您的temp变量的类型 - 因为在某些地方您使用它就像char *而在其他地方'像char一样使用它。

我怀疑编译器错误在ptr[strlen(ptr)-1] = temp;上(因为我怀疑tempchar *),正确的解决方法是:ptr[strlen(ptr)-1] = *temp;