-2

文字列を入力する必要があります。文字列がスペースを含まない文字列全体である場合、コードは問題ありません。入力がスペースを含む文字列である場合、文字列は文字列全体ではなく最初の文字列セットのみをコピーしますか? 私は初心者です、助けてください。

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

int main() {
    char again = 0;
    do {
        char str[60], s[60];
        int i, j = 0;

        printf("Enter any string->");
        scanf("%s", str);
        printf("The string is->%s", str);

        for (i = 0; i <= strlen(str); i++) {

            if (str[i] == 'a' || str[i] == 'e' || str[i] == 'i' ||
                str[i] == 'o' || str[i] == 'u' || str[i] == 'A' ||
                str[i] == 'E' || str[i] == 'I' || str[i] == 'O' ||
                str[i] == 'U') {

                str[i] = ' ';

            } else {
                s[j++] = str[i];
            }
        }

        s[j] = '\0';
        printf("\nThe string without vowel is->%s", s);
        NSLog(@"Do you want to enter another string to be edit? (y/n) ");
        scanf("%s", &again);
    } while (again != 'n');
}
4

3 に答える 3

1

コードはスペースで読み取りを停止します。これは、フォーマットでの動作方法であるためです。scanf%s非空白文字のシーケンスを読み取ります。

実際に C++ を使用している場合は、行末まですべての入力を読み取るstd::stringandに切り替えるのが賢明です。std::getlineただし、あなたのコードは C++ 機能を使用していないように見えるため、実際には C を使用している可能性があります。その場合は、fgets代わりに検討してください。行全体も読み取ります (通常はバッファーのサイズに対応する指定されたサイズまで)。

于 2013-09-11T21:39:21.337 に答える
0

60 文字の長さ (str) の配列を割り当てています。あなたはそれをたくさん読むことを期待することはできません. いくつかのヒントを次に示します。

  • そのようなバッファは使用しないでください。危険です。C++ ライブラリはstd::stringを提供します。
  • 中括弧は絶対に省略しないでください{}
  • この恐ろしく長い if よりも簡単に文字をチェックする方法があります。ヒント: std::string::find_first_of
于 2013-09-11T20:48:40.380 に答える