-1

文中の単語の文字を逆にしようとしています。また、これらの単語を新しい char 配列に格納しようとしています。現時点では、実行時エラーが発生していますが、これはすべての調整で解決できません。私のアプローチは、文と同じ長さの新しい char 配列を作成することです。次に、' ' 文字に到達するまで文をループします。次に、逆方向にループして、これらの文字を単語に追加します。次に、単語を新しい文に追加します。どんな助けでも大歓迎です。

int main(void) {
    char sentence [] = "this is a sentence";
    char *newSentence = malloc(strlen(sentence)+1);
    int i,j,start;
    start = 0;

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

        if(sentence[i] == ' ')
        {
            char *word = malloc((i - start)+1);
            for(j = sentence[i]; j >= start; j--)
            {
                word[j] = sentence[j];
            }
            strcat(newSentence,word);
            start =sentence[i +1];
        }
    }
    printf("%s",newSentence);
    return 0;
}
4

5 に答える 5

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

int main(void) {
    char sentence [] = "this is a sentence";
    char *newSentence;
    int i,j,start, len;
    start = 0;
    len = strlen(sentence);
    newSentence = malloc(len+1);
    *newSentence = '\0';

    for(i = 0; i <= len; i++)
    {
        if(sentence[i] == ' ' || sentence[i] == '\0')
        {
            char *word = malloc((i - start)+1);
            int c = 0;
            for(j = i - 1; j >= start; j--)
            {
                word[c++] = sentence[j];
            }
            word[c]='\0';
            strcat(newSentence,word);
            if(sentence[i] == ' ')
                strcat(newSentence," ");
            start = i + 1;
            free(word);
        }
    }
    printf("%s",newSentence);
    return 0;
}
于 2013-04-15T18:55:36.333 に答える
1

あなたのプログラムにはほとんどバグがありませんでした。このプログラムで削除しようとしたもの:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
    char sentence [] = "this is a sentence";
    char *newSentence = (char *)malloc(strlen(sentence)+1);
    int i,j,start, k;
    start = 0;

    for(i = 0;; i++)
    {

        if(sentence[i] == ' ' || sentence[i] == '\0')   //sentence[i] == '\0' for the last word.
        {
            char *word = (char *) malloc((i - start)+1);
            for(j = i-1, k = 0; j >= start; j--, k++)
            {
                word[k] = sentence[j];
            }
        word[k++] = ' ';                    //space after each word
        word[k] = '\0';                 

            strcat(newSentence,word);

            start = i+1;
        }

    if (sentence[i] == '\0')
        break;
    }
    printf("%s\n",newSentence);
    return 0;
}

http://ideone.com/Z9ogGkでライブをチェック

于 2013-04-15T18:54:33.450 に答える