http://acm.tju.edu.cn/toj/showp1153.html
这道题之前做过,但是当时直接看的网上代码,自己没有过多思考。这次重新拿出来做一下。
第一个难关就是C语言中空格字符的读入和计入长度。由于第一个输入的是样例数目,因此在读入字符串的时候会读入第一个数的回车\n,所以我用getchar()来吃掉回车。
在网上查到,用gets(str)函数可以读入空格,用strlen(str)函数可以将空格计入字符串长度。
至此,第一个问题解决。
其次,就是要实现对每个单词的逆序排列了。在这里,我用一个新的字符串word来存储每个原来的单词,每次读到一个空格' '就存储一次,紧接着将句子中的单词替换成逆序,再继续下一个单词,这样一直到最后一个字母,所有单词都是逆序的了。直接输出即可。
在这个问题里,我调了一上午的代码,总是有许多错误,有的是因为粗心,有的是因为对字符串掌握不足。前前后后也使用了许多个printf语句查看程序运行过程中的参数变化,也算是掌握了调bug的一种小方法吧…吃饭去了。
代码:
#include
#include
#include
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