0

基本的な構文解析のデモンストレーションに使用されるプログラムを作成しようとしていますが、C は私の主な言語ではありません。このままでは問題があり、この出力を印刷しようとしています。

出力: FOO/4200、FOO、4200

組み合わせを示してから、それぞれ別々に表示することを想定しています。

char *afterSeparator(char *complete)
{
    char *separator = strchr(complete, '/');
    if(slash) 
    {
    return separator + 1;
    }
    return complete;
}

char *beforeSeparator(char *complete)
{
    char *separator = strchr(complete, '/');
    if(separator)
    {
        *separator = '\0';
    }
    return complete;
void printParts(void)
{
    char original[] = "FOO/4200";
    char *preSeparator = beforeSeparator(original);
    char *postSeparator = afterSeparator(original);
    printf("%s, %s, %s\n", original, preSeparator, postSeparator);
}
4

3 に答える 3

1

「beforeSeparator」を使用すると、「/」が「\0」で上書きされます。これにより、文字列が途中で終了します。「afterSeparator」を生成すると、文字列に「/」がなくなります。

于 2012-12-10T05:32:04.973 に答える
1

afterSeparatorあなたが電話した後、前に電話してくださいbeforeSeparator

すべての順序である必要があります

  1. 初版原画
  2. afterSeparator を呼び出す
  3. beforeSeparator を呼び出す
  4. preSeparator と postSeparator を印刷する

beforeSeparatorをに置き換え/ます\0。したがって、呼び出しafterSeparator後の呼び出しは機能しbeforeSeparatorません。またoriginal、呼び出し後に印刷しbeforeSeparatorても正しい結果は得られませFOO\0

于 2012-12-10T05:32:21.620 に答える
0

私はあなたのためにサンプルを作りました。

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

int main()
{
char str[100] = "Hello/Jay";

printf("\n%s\n", strrchr(str, '/')+1);
str[strlen(str)-strlen(strchr(str, '/'))] = '\0';
printf("\n%s\n", str);

return 0;
}

必要に応じて変更してください。

于 2012-12-10T11:09:29.510 に答える