在C中的单词周围交换字符串位置?

时间:2016-12-02 17:17:45

标签: c

我的问题是我有一个输入说:

# ## abc ###

我的输出应该是:

### abc # ##

我做的是循环输入,每当我在英语单词之前找到一个字符,英语单词和使用我的算法的以下部分在相应的先前初始化数组中的英语单词后面的字符:

char before[before_size],after[after_size],word[word_size];
word_found = 0;
if(flag == 1){
    for(j = 0;j<strlen(word_arr);j++){
        if(isalpha(*(word_arr+j)) == 0 && word_found == 0){
            before[b_counter] = *(word_arr+j);
            b_counter++;
            //"I am inserting elements in the before array!\n");
        }else if(isalpha(*(word_arr+j)) != 0){
                 word[word_counter] = *(word_arr+j);
                 word_found = 1;
                 word_counter++;
                 //"I am inserting elements in the word array!\n");
        }else if(isalpha(*(word_arr+j))== 0 && word_found == 1){
                 after[a_counter]= *(word_arr+j);
                 a_counter++;
                 //"I am inserting elements in the after array!\n");
        }
    }
    printf("%s %s %s",after,word,before);
}

word_arr基本上是用户输入。 但输出是偏斜的,因为这是我得到的输出:

###> abc > # ## r"u6@wI  # ## abc ###

计算机输出的那些垃圾是什么?它们来自哪里?

1 个答案:

答案 0 :(得分:2)

  

计算机输出的那些垃圾是什么?

这是来自字符数组beforewordafter中字符串的未初始化部分的字符。 printf的{​​{1}}不知道初始化部分的结束位置,因此它会一直持续到找到%s个字符。

  

他们来自哪里?

原因是缺少空终止符。循环后添加它们如下:

'\0'