正如标题所说,在我的程序中,我(在许多程序之后)获得了标记化的单词。 不幸的是,由于它们被反转,它们在一个单词的开头保留标点字符,例如。 ,驼鹿
如何将,
从开头移到最后 - >驼鹿,
到目前为止,我已尝试过(ptr
为char *
):
temp = strdup(ptr);
temp = &ptr[0];
ptr[0] = ptr[1];
ptr[strlen(ptr)-1] = temp;
free(temp);
但这给了我错误:
赋值从整数中生成没有强制转换的指针
警告:赋值在没有强制转换的情况下从指针生成整数
如何解决这个问题?
答案 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;
上(因为我怀疑temp
是char *
),正确的解决方法是:ptr[strlen(ptr)-1] = *temp;