2

タイトルが示すように、私のプログラムでは (多くの手順を経て) トークン化された単語を取得します。残念ながら、それらを逆にすると、単語の先頭に句読点文字が保持されます。、ムース

,それを最初から最後まで移動する方法->ムース、

今まで私は試しました(ptrですchar *):

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

一般に、コンマは独自のトークンであるべきであるため、トークン化後に解析すると、最初のトークナイザーの後に 2 番目のトークナイザーが配置されます。

最良の解決策は、空白で分割するだけでなく、コンマを独自のトークンとして認識し、文法の一部としてコンマの存在をテストできるようにすることです。

于 2012-09-21T14:41:14.967 に答える
1

コードを確認し、型がないことを推定すると、temp変数の型を知ることは困難です。ある場所ではaのように使用し、他の場所ではのようにchar *使用しているためcharです。

コンパイラエラーがオンラインになっていると思われますptr[strlen(ptr)-1] = temp;(これはであると思われるためtempchar *。適切な修正は次のとおりです。ptr[strlen(ptr)-1] = *temp;

于 2012-09-21T14:42:54.857 に答える