完全颠倒句中的字母C语言,​编写程序颠倒句子中单词的顺序

该题出自《C语言程序设计――现代方法》第8章编程题14

编写程序颠倒句子中单词的顺序:

Enter a sentence:you can cage a swallow can't you?

Reversal of sentence: you can't swallow a cage can you?

思路:

利用getchar()函数自动读取缓存的特性,用循环逐个读取字符,当遇到句号、问好或者感叹号(称为“终止符”)时,循环终止并把终止符储存在一个char变量当中。

利用反向循环,遇空格符则终止。进入下一个循环,打印单词,接着寻找下一个空格符。

代码如下:

#include 

int main()

{

int i, j, cnt;

char ch,end;

char sentence[N];

printf("Enter a sentence: ");

i = 0;

while(1) //逐个读取字符的循环

{

ch = getchar();

if(ch == '.' || ch == '!' || ch == '?')

break; //遇终止符

sentence[i++] = ch;

}

end = ch; //保存终止符

i--;   //将指针退回到最后一个字母

printf("Reserval of sentence: ");

while(i >= 0 )

{

for(cnt = 0;(i >= 0) && (sentence[i] != ' ');i--, cnt++)

;//寻找空格符

for(j = i + 1;cnt > 0;cnt--)//打印单词

printf("%c", sentence[j++]);

if(i > 0)

printf(" ");

i--;//进入前一个单词

}

printf("%c\n", end);

return 0;

}

程序运行结果:

98ad3b8631cac0627fa087d4fb959c31.png

这是我暂时所能想到的方法,如果有更加简便的方法,欢迎一起讨论一下。

分析: 这道题目可以分为两个步骤: 1. 将句子的每个单词分离出来,存储到一个数组; 2. 依次输出数组存储的单词,但是要按照相反的顺序输出。 解答: ``` #include <stdio.h> #include <string.h> #define MAX_LENGTH 100 void reverse_words(char *str) { int len = strlen(str); char words[MAX_LENGTH][MAX_LENGTH]; int word_count = 0; int word_start = 0; int i; for (i = 0; i < len; i++) { if (str[i] == ' ' || str[i] == '\n') { int word_len = i - word_start; strncpy(words[word_count], &str[word_start], word_len); words[word_count][word_len] = '\0'; word_count++; word_start = i + 1; } } // 处理最后一个单词 int word_len = i - word_start; strncpy(words[word_count], &str[word_start], word_len); words[word_count][word_len] = '\0'; word_count++; for (i = word_count - 1; i >= 0; i--) { printf("%s ", words[i]); } } int main() { char str[MAX_LENGTH]; fgets(str, MAX_LENGTH, stdin); reverse_words(str); return 0; } ``` 首先,我们定义了一个常量 `MAX_LENGTH` 表示输入句子的最大长度,这样就可以在程序使用这个值。 接着,我们定义了一个函数 `reverse_words`,它的参数是一个字符串,表示要颠倒单词顺序句子。函数的作用是将句子的每个单词分离出来,存储到一个二维字符数组,然后按照相反的顺序输出。 具体实现过程如下: 1. 首先,我们计算出句子的长度,并定义一个二维字符数组 `words`,用于存储单词; 2. 接着,我们定义三个变量,分别记录当前单词的起始位置、单词数量和句子长度; 3. 然后,我们遍历整个句子,如果遇到空格或换行符,就说明一个单词已经结束了,我们就将这个单词复制到 `words` 数组,并更新当前单词的起始位置和单词数量; 4. 最后,我们处理最后一个单词,并将 `words` 数组单词按照相反的顺序输出。 在 `main` 函数,我们使用 `fgets` 函数从标准输入读取一行字符串,并将其作为参数传递给 `reverse_words` 函数,然后程序结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值