2

正如标题所说,在我的程序中,我(经过许多程序)得到了标记化的单词。不幸的是,由于颠倒了它们,它们在单词的开头保留了标点符号,例如。,驼鹿

如何,从头到尾移动它->驼鹿,

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

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

但这给了我错误:

赋值使指针从整数而不进行强制转换

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

如何解决?

4

3 回答 3

5

像这样的东西:

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是有效的。

于 2012-09-21T14:40:52.393 回答
3

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

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

于 2012-09-21T14:41:14.967 回答
1

查看你的代码并推断它缺少类型,很难知道你的temp变量的类型——因为在某些地方你像 a 一样使用它,char *而在其他地方你像 a 一样使用它char

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

于 2012-09-21T14:42:54.857 回答