0

ここに、いくつかのスプリッターがある文字配列が 1 つあります。

文字配列はchar sentence []="abc_12.22.32.42";

sscanfを使って文章からabc,12,22,32,42を読みたい。

sscanf で試しましたが、出力が異なります。

私はここに2つのコードを投稿しました.1つは正常に動作しています。

私が読んだらabc = 12%s = %sその作品。スプリッターの間にスペースを空ける必要がある理由。

この目標を達成するための任意の方法。

動作しないコード:

#include <stdio.h>

int main ()
{
  char sentence []="abc_12.22.32.42";
  char str [20];
  char str1 [20];
  char str2 [20];
  char str3 [20];
  sscanf (sentence,"%s_%s.%s.%s.%s",str,str1,str2,str3);
  printf ("%s --> %s --> %s --> %s --> %s\n",str,str1,str2,str3);
  return 0;
}

出力:

abc_12.22.32.42-->  -- � -->�Tl�s --> (null)

期待される出力:

 abc --> 12 --> 22 --> 32 --> 42

作業コード:

/* sscanf example */
#include <stdio.h>

int main ()
{
  char sentence []="abc = 12";
  char str [20];
  char str1 [20];
  char str2 [20];
  char str3 [20];
  if(sscanf(sentence,"%s = %s",str,str1) < 5) ;
        printf ("%s--> %s\n",str,str1);
  return 0;
}

出力:

abc--> 12
4

3 に答える 3

3

次のような形式を指定する場合:プログラムは、最初の文字列に文字および を%s_%s.%s.%s.%s含めることができないことを認識できません。これが、文全体が に格納される理由です。'_''.'sscanf(sentence,"%s_%s.%s.%s.%s", str0, str1, str2, str3, str4);str0

のままにしたい場合はsscanf、予想される形式を変更する必要があります。

char sentence[] = "abc_12.22.32.42";
char str0[20], str1[20], str2[20], str3[20], str4[20];
sscanf (sentence,"%19[^_]_%19[^.].%19[^.].%19[^.].%19[^.]",
        str0, str1, str2, str3, str4);
printf ("%s --> %s --> %s --> %s --> %s\n",
        str0, str1, str2, str3, str4);

%19[^_]str0は最大 19 文字 (20 文字は ) を含み、文字がの一部になるの'\0'を防ぎます。したがって、出力は希望どおりになります。'_'str0abc --> 12 --> 22 --> 32 --> 42

または、 を使用することもできますstrtok

于 2012-06-07T07:21:57.850 に答える
1

機能を使用しstrtokます。文字列を分割する最良の方法です

strtok の例

于 2012-06-07T08:16:31.303 に答える
0

',' と '-' を ' ' に置き換えます。また、もう 1 つの配列 str4 が必要です

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

int main ()
{
    char sentence []="abc_12.22.32.42";
    char str [20];
    char str1 [20];
    char str2 [20];
    char str3 [20];
    char str4 [20];

    int i;
    for (i=0; i<strlen(sentence); i++) {
        if (sentence[i] == '_') sentence[i] = ' ';
        if (sentence[i] == '.') sentence[i] = ' ';
    }

    sscanf (sentence,"%s %s %s %s %s",str,str1,str2,str3, str4);
    printf ("%s--> %s --> %s -->%s --> %s\n",str,str1,str2,str3, str4);
    return 0;
}
于 2012-06-07T07:20:34.643 に答える