TOJ1153

http://acm.tju.edu.cn/toj/showp1153.html

这道题之前做过,但是当时直接看的网上代码,自己没有过多思考。这次重新拿出来做一下。

第一个难关就是C语言中空格字符的读入和计入长度。由于第一个输入的是样例数目,因此在读入字符串的时候会读入第一个数的回车\n,所以我用getchar()来吃掉回车。

在网上查到,用gets(str)函数可以读入空格,用strlen(str)函数可以将空格计入字符串长度。

至此,第一个问题解决。

其次,就是要实现对每个单词的逆序排列了。在这里,我用一个新的字符串word来存储每个原来的单词,每次读到一个空格' '就存储一次,紧接着将句子中的单词替换成逆序,再继续下一个单词,这样一直到最后一个字母,所有单词都是逆序的了。直接输出即可。

在这个问题里,我调了一上午的代码,总是有许多错误,有的是因为粗心,有的是因为对字符串掌握不足。前前后后也使用了许多个printf语句查看程序运行过程中的参数变化,也算是掌握了调bug的一种小方法吧…吃饭去了。

代码:

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

int main(){
    int N;
    scanf("%d", &N);
    getchar();
    while(N--){
        char sen[100];

        gets(sen);
        //printf("%s\n", sen);
        int len = strlen(sen);
        //printf("%d \n", len);
        for(int i = 0; i < strlen(sen); i++){
            int j = 0;
            char word[100];
            memset(word, 0, sizeof(word));
            //printf("first %d %d\n", i ,j);//cout << i << " "  << j << endl;
            //cout << word << endl;
            while(sen[i] != ' ' && i <strlen(sen)){
                word[j] = sen[i];
                j++;
                i++;
            }
            //printf("second %d %d\n", i ,j);//cout << i << " "  << j << endl;
            //printf("%d\n", strlen(word));//cout << word.length() << endl;
            //printf("%s\n", word);
            int p = strlen(word)-1;
            for(int k = i-strlen(word); k < i; k++){
                sen[k] = word[p];
                p--;
            }
        }
        printf("%s\n", sen);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/rr572078051/article/details/82950218