c - 为什么这个倒转句算法不起作用?

标签 c

代码中有一些人类可读代码的注释:

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

#define SIZE 100   //size of the input array and output array
#define ACCUM_CHAR_SIZE 25  //size of the temp array
int main(){
   char i[SIZE];
   char acc[ACCUM_CHAR_SIZE];
   char o[SIZE];
   int it_l = 0, it_a = 0, it_r = 0;
   //it_l is the iterator to the input sentence,
   //it_a is the iterator to the temp array
   //it_r is the iterator to the output sentence
   printf("Enter a sentence:");
   gets(i);
   int len = strlen(i) - 1;
   while(it_l <= len){
        if(i[len - it_l] != ' '){
            acc[it_a] = i[len - it_l];  //add letters to acc until space
            it_a++;
        }
        else{
            it_a -= 1;
//acc is reversed, I reversed it again to the output sentence
            while(it_a >= 0){
                o[it_r] = acc[it_a];
                it_r++;
                it_a--;
            }
            it_r += 1;
            o[it_r] = 32;   //put a space
            it_a = 0;  //reset the temp array
            strcpy(acc, ""); //clear the acc
        }
        it_l++;
   }
   printf("%s", o);
}

程序理论上看起来不错,但执行时有时会打印垃圾值,只打印一些单词,或者只用垃圾值而不是空格反转一半的句子。

上面的程序是将每个单词保存到temp,并将temp反转(存储单词时temp被反转)返回到输出。然而,它失败了。

感谢您的帮助。

最佳答案

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

#define SIZE 100   //The size of input array is prefered to be equal to ouput array.
int main(){
   char input[SIZE];
   char output[SIZE];
   int i = 0, j = 0;
   //i is the iterator to the input sentence,
   //j is the iterator to the output sentence
   printf("Enter a sentence:");
   gets(input);
   int len = strlen(input) - 1; //Total length.
   j = len;
   while(input[i]!= NULL){
            output[j] = input[i];  
            i++;
            j--;            
   }
    output[len+1]= NULL;
    printf("%s", output);
    printf("Finished");
 }

关于c - 为什么这个倒转句算法不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52453514/

相关文章:

c - 高强制级别应用程序的持久化-windows

c - MPI_Scatter 和 MPI_Gather 不起作用

无法设置 C char 数组元素

c - DCT 的 C 图像分割

c - 用户输入循环

c - 小端宏

c++ - 如何知道MFC消息循环是否已经在运行?

c - 高效地乘以 7

无法链接程序,glLinkProgram() 给我 GL_INVALID_OPERATION

Calloc 返回的地址导致我的程序发生段错误