|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
- }
复制代码
|
|