2016-10-19 6 views
1

たとえば、この文字列を変換する方法を知りたいのですが、フルネームをCの書誌形式名に変換する方法は?

"OBAMA、Barack"には "Barack Obama"があります。

例えば、書籍/記事を書くときのような書誌形式に。しかし、私はどのようにこの形式で任意の種類の名前を変換するかを知りたいので、2つの名前(前例のように)または3、4、5 ... nの名前にすることができます。

LionelAndrésBlablabla Soccer Player Messi

この名前はMESSI、LionelAndrésBlablabla Soccer Playerです。

フルネームがどのくらいの名前を持つのかわかっている方は知っていますが、どれだけの名前があるのか​​わからないフルネームでどのようにできるのか知りたいのですが。ここで

は、私がこれまで(下の例では唯一の6名のために働い)持っているものです:

char nome[30][100]; 
int i, j; 

for(i = 0; i < 6; i++) 
    scanf("%s", nome[i]); 
for(j = 5; j > 4; j--) 
    printf("%s,", strupr(nome[j])); 
for(i = 0; i <= 4; i++) 
    printf("%s ", nome[i]); 
+0

DE MELLO、アンソニー」トニー " –

答えて

0

フォーマットは比較的単純である場合には(あなたが「あなたのコメントでその旨ように見えるあらゆる種類文字列の最後のスペースを見つけるために

  1. 使用strrchr():名前のこの形式」)には、次のアプローチを使用することができます。明らかに、その点を超える文字は姓を構成します。
  2. したがって、の前には、ではないの部分のすべての名前が構成されています。の部分です。
  3. したがって、最後の名前、カンマとスペース、そして文字列の前の部分を単純に出力します。

さて、付与された、複数の単語から構成され、あなたの入力文字列がそのようにきれいにフォーマットされていない場合に処理する必要がありエッジケースのすべての種類、末尾のスペースをのようなもの、姓が存在するので、に。実際のコードの点で


、次のプログラムは、良好な出発点であろう。

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

int main(void) { 
    static char buffer[1000]; 

    while (1) { 
     // Get line from user. 

     printf ("\nEnter name> "); 
     if (fgets(buffer, sizeof(buffer), stdin) == NULL) { 
      printf("\n*** End of file, stopping.\n"); 
      return 0; 
     } 

     // Remove any trailing newline. 

     if ((*buffer != '\0') && (buffer[strlen(buffer) - 1] == '\n')) 
      buffer[strlen(buffer) - 1] = '\0'; 

     // Find last space. If none, output as is. 

     char *lastSpace = strrchr(buffer, ' '); 

     if (lastSpace == NULL) { 
      printf ("  --> %s\n", buffer); 
      continue; 
     } 

     // Otherwise separate, capitalise surname and output all. 

     *lastSpace++ = '\0'; 

     for (char *surchar = lastSpace; *surchar != '\0'; surchar++) 
      *surchar = toupper(*surchar); 

     printf ("  --> %s, %s\n", lastSpace, buffer); 
    } 

    return 0; 
} 

本のサンプルのランを以下に示す:

Enter name> bob 
     --> bob 

Enter name> allan 
     --> allan 

Enter name> Barack Obama 
     --> OBAMA, Barack 

Enter name> Lionel Andres Blablabla Soccer Player Messi 
     --> MESSI, Lionel Andres Blablabla Soccer Player 

Enter name> <CTRL-D pressed> 
*** End of file, stopping. 
関連する問題