0

以下のコードは、一度に複数行のテキストを操作しようとします。

1.私の最初の問題は、(scanf()を使用して)複数行のテキストを読み取るループを記述し、入力された最初の文字が改行のときに終了することです。これらのテキスト行にはいくつかの条件があります: 最初の文字は 2 から 6 までの数字で、その後にスペースとテキスト行 (<80) が続く必要があります。この数字により、テキストが「踊る」ようになります。

2. 私の 2 番目の問題は、最初に入力した数字に従って、文字を小文字から大文字に、またはその逆に変換する方法を理解することです。これらの変換を行うために機能する必要がありますが、それらを呼び出してテキストを変更する方法がわかりません。たとえば、「3 つのリンゴとバナナ」と入力した場合、正しい出力は「AppLes And BanNas」になるはずです。ご覧のとおり、空白は無視され、テキストは常に大文字で始まります。

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

using namespace std;
void print_upper(string s1);
void print_lower(string s2);
void main(void)
{
    char text[80];
    text[0]='A';//Initialization
    int count_rhythm;

    while (text[0] != '\n'){//To make the loop run until a newline is typed
        scanf(" %79[^\n]",text);
        if(isdigit(text[0])) //To verify that the first character is a number
        {   
            printf("\nGood");//Only to test 
        }
        else
        {
            printf("\nWrong text\n");//Only to test
        }
    }
}

void print_upper(string s1)//Print capital letters
{
    int k1;
    for(k1=0; s1[k1]!='\0'; ++k1)
        putchar(toupper(s1[k1]));
}

void print_lower(string s2)//Print small letters
{
    int k2;
    for(k2=0; s2[k2]='\0'; ++k2)
        putchar(tolower(s2[k2])); 
}
4

2 に答える 2

0

printNthUpper()文字列と、大文字で出力する文字を指定する整数 n を取る関数を定義することもできます。関数の は、既に持っている関数と同様のループになりますが、提供された整数値と指定された文字のインデックスを比較して toupper() を呼び出すかどうかを決定する条件付き (例: printf("%c", i%n == 0 ? toupper(s[i]) : s[i]);)。

于 2013-08-31T14:49:47.443 に答える