zoj1151

zoj1151
即使是没有算法的题,也应该想清楚了再写,特别是关于字符串处理的,细节很多,稍不注意就会发生错误。
下面这道题是经典的“回文”题,要求输出每句话中每个单词的回文,但是单词在句子中的位置不变。

#include<stdio.h>
#include
<stdlib.h>
#include
<string.h>
#define LEN 20000
void Reversal(char *str)
{
    
int i, j;
    
int len = strlen(str);
    
int bg;
    
for(i = 0; i <= len; i++)//跳过句首的空格
        if(str[i] == ' ')
            putchar(str[i]);
        
else 
        
{
            bg 
= i;
            
break;
        }

    
for(; i <= len; i++)
    
{
        
if(str[i] == ' ' || i == len)//一个单词结束,输出该单词的回文
        {
            
for(j = i - 1; j >= bg; j--)
                putchar(str[j]);
            
if(i != len)
                putchar(str[i]);
        }

        
if(str[i] == ' ' && str[i + 1!= ' ')//新单词的开始标志
            bg = i + 1;
    }

}

int main()
{
    
int i, j;
    
int N, M;
    
int gard;
    
char str[LEN];
    scanf(
"%d"&N);
    gard 
= 0;
    
for(i = 0; i < N; i++)
    
{
        
if(gard++ != 0)
            printf(
"\n");
        scanf(
"%d"&M);
        getchar();
        
for(j = 0; j < M; j++)
        
{
            gets(str);
            Reversal(str);            
            putchar(
10);
        }

    }

    
//system("pause");
}


你可能感兴趣的:(zoj1151)