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

在C语言中交换单词周围的字符串位置?,c,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++){

我的问题是我有一个输入,比如:

# ## 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);
}
计算机输出的那些垃圾是什么?它们来自哪里

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

这是字符数组中字符串未初始化部分的字符
之前、
单词
之后
printf
%s不知道初始化部分的结束位置,因此它将继续执行,直到找到
'\0'
字符

他们从哪里来

原因是缺少空终止符。将它们添加到循环之后,如下所示:

before[b_counter] = '\0';
word[word_counter] = '\0';
after[a_counter] = '\0';

是的,这解决了出现的奇怪角色!我的另一个担忧是,现在输出是##abc#,在句子的最前面有一个空格,因为我将它包括在我的“After”数组中。你知道如何删除它以便我的输出从一开始就有一个空格吗?当你想在每个字符串(字符数组)的末尾添加一个额外的字符时,你必须为每个字符串(字符数组)分配一个额外的索引。因此,每个字符数组需要额外扩展1个字符place@MahmoudAyman您的代码是一个简单的状态机;你需要在它后面加一个状态-在单词后面但在后缀之前。在找到后做一个
after
标记,当您看到单词后面的第一个字符不是
isspace(…)
时,将其设置为1。我想在[…]@dasblinkenlight isspace()函数将简化整个算法之前,
的尾随空间也会出现类似的问题。非常感谢您的帮助!
before[b_counter] = '\0';
word[word_counter] = '\0';
after[a_counter] = '\0';