| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
我正在编写程序试图颠倒句子中单词的顺序: 
- Enter a sentence: you can cage a swallow can't you?
 
 - Reversal of sentence: you can't swallow a cage can you?
 
  复制代码 
我的想法是使用一个二维数组存储单词字符串,通过一个循环使用 scanf 函数读入单词。 
 
每次读入单词时判断单词的最后一个字符是否是终止字符(. ? !) 
 
如果是,则将最后一次读入的单词末尾字符更换为空字符('\0')后结束循环。 
 
然后逆序打印二维数组中的字符串: 
- #include <stdio.h>
 
 - #include <string.h>
 
  
- #define WORD_NUMBER 30
 
 - #define WORD_LENGTH 20
 
  
- int main(void)
 
 - {
 
 -     char ch, terminator, *p;
 
 -     char words[WORD_NUMBER][WORD_LENGTH+1];
 
  
-     printf("Enter a sentence: "); 
 
 -     
 
 -     p = words[0];
 
 -     while (1) {
 
 -         scanf("%s", p);
 
  
-         // 判断读入字符串的最后一个字符是否是终止符
 
 -         ch = p[strlen(p)-1];
 
 -         if (ch == '.' || ch == '?' || ch == '!') {
 
 -             terminator = ch;
 
 -                 p[strlen(p)-1] = '\0';
 
 -                 break;
 
 -         }
 
 -         p++;
 
 -     }
 
  
-     // 逆序打印单词
 
 -     printf("Reversal of sentence:");
 
 -     for (; p >= words[0]; p--)
 
 -         printf(" %s", p);
 
 -     printf("%c\n", terminator);
 
 -     
 
 -     return 0;
 
 - }
 
  复制代码 
输出的结果并不是如我预期的那样逆序输出单词: 
- Enter a sentence: you can cage a swallow can't you?
 
 - Reversal of sentence: you cyou scyou ascyou cascyou ccascyou yccascyou?
 
  复制代码 
我不理解是什么情况导致了字符串的后缀是 cyou。 
 
拜托各位大佬指点一下错误的地方,感激不尽,谢谢~  
 本帖最后由 jhq999 于 2021-12-6 22:26 编辑 
- #include <stdio.h>
 
 - #include <string.h>
 
  
- #define WORD_NUMBER 30
 
 - #define WORD_LENGTH 20
 
  
- int main(void)
 
 - {
 
 -     char ch, terminator, *p;
 
 -     char words[WORD_NUMBER][WORD_LENGTH+1];
 
  
-     printf("Enter a sentence: "); 
 
 -     
 
 -     p = words[0];
 
 -     while (1) {
 
 -         scanf("%s", p);
 
  
-         // 判断读入字符串的最后一个字符是否是终止符
 
 -         ch = p[strlen(p)-1];
 
 -         if (ch == '.' || ch == '?' || ch == '!') {
 
 -             terminator = ch;
 
 -                 p[strlen(p)-1] = '\0';
 
 -                 break;
 
 -         }
 
 -         p[strlen(p)] = '\0';
 
 -         p+=strlen(p)+1;
 
 -                 
 
 -     }
 
  
-     // 逆序打印单词
 
 -     printf("Reversal of sentence:");
 
 -     for (; p >= words[0]; p--)
 
 -                 if(*(p-1)==0||words[0]==p)printf(" %s", p);
 
  
-     printf("%c\n", terminator);
 
 -     
 
 -     return 0;
 
 - }
 
  复制代码 
 
 
 |   
 
 
 
 |