-1

配列「secuencia」からスペースを削除しようとしています。ユーザーから次のエントリが表示されます。

「123 4 5 6 789」

スペースを削除して、後で使用できるように別の配列に保存したいと思います。次に、配列「palancas」と「palancaroja」の場合と同じように、「ATOI」を使用して整数に変換します。これらの2つの配列には1つの番号しか含まれていなかったので、問題はありませんでした。

助けてください...私はANSICでプログラミングしています。

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

int main(int argc, const char * argv[])
{
    char palancas [20000];
    int palancai;
    char palancaroja[10];
    int palancarojai;
    char secuencia[20000];
    char temp[20000];
    int j = 0;

    printf("Dame El Numero De Palancas:");
    fgets(palancas, 20000, stdin);

    printf("Dame La Posision De La Palanca Roja:");
    fgets(palancaroja, 10, stdin);

    palancai = atoi(palancas);
    palancarojai = atoi(palancaroja);

    printf("Dame La cadena");
    fgets(secuencia, 20000, stdin);

    for (int i = 0; i < palancai; i++) {

        if (secuencia [i] != ' ') {

        temp [i] = secuencia [i];


            printf("%s", temp);


        }
    }
}
4

5 に答える 5

1

クリティカルセクションの翻訳版

for (int i = 0; i < length; i++) {
    if (source[i] != ' ') {
        temp[i] = source[i];
        printf("%s", temp);
    }
}

sourceこのコードは、すべての文字を配列から配列にコピーtempしますが、単にスペースをスキップします。したがって、tempがで初期化されXXXXXsourceA B Cである場合tempAXBXC、ループの実行後です。

2つのインデックスを使用しています(他の回答を参照)

于 2012-07-10T19:39:11.913 に答える
1

これは、文字列からスペースを削除する最も簡単な方法です。

char *SourcePtr = secuencia;
char *TargetPtr = SourcePtr;

while (*SourcePtr != 0)
{
    if (*SourcePtr != ' ')
    {
       *TargetPtr = *SourcePtr;
       TargetPtr += 1;
    }
    SourcePtr += 1;
}
*TargetPtr = 0;
于 2012-07-10T19:39:00.760 に答える
1
#include <stdio.h>

//copy to d from s removed space
void remove_space(char *d, const char *s){
    for(;*s;++s){
        if(*s != ' ')
            *d++ = *s;
    }
    *d = *s;
}

int main(){//DEMO
    char secuencia[] = "1 2 3 4 5 6 7 8 9";
    char temp[sizeof(secuencia)];
    remove_space(temp, secuencia);
    puts(temp);//123456789
    return 0;
}
于 2012-07-11T10:45:27.340 に答える
0

strtokを使用して、取得した文字列をトークン化し、区切り文字列を「」にすることができます。

言い換えると:

char * tok;
int i = 0;
tok = strtok(secuencia, " ");
while(tok != NULL){
    temp[i] = tok[0];
    i++;
    tok = strtok(NULL, " ");
}

ただし、これは、各スペース間の1桁であることが保証されている場合にのみ機能します。それをコピーする別の方法は、別のループを使用するか、「\ 0」に達するまでstrtokを循環するか、strcpyを使用することです。

于 2012-07-10T19:37:31.437 に答える
0

まず、forループが間違った変数を見ていると思います。あなたは本当にsecuenciaでループしたいpalancaiでループしようとしています。

以下に、intを解析する関数を示します。

int MyIntParse(char* str)
{
    int iReturn = 0;
    for(int i=0;i<20000;++i)
    {
        iReturn *=10;
        switch(str[i])
        {
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
            case '0':
                iReturn = iReturn + (str[i] - '0');
                break;
        }
    }
    return iReturn;
}
于 2012-07-10T19:46:46.970 に答える