小明同学写单词的时候喜欢反着写,比如 hello 他会写成 olleh。给出小明同学写的一个句子,请你将所有的单词复原。用C语言
时间: 2024-10-13 13:03:56 浏览: 96
小明同学的这种习惯可以通过遍历字符串并逐个字符恢复原样来处理。下面是一个简单的C语言示例,用于反转输入的字符串:
```c
#include <stdio.h>
#include <string.h>
void reverse_string(char *str) {
int length = strlen(str);
for (int i = 0; i < length / 2; i++) {
char temp = str[i];
str[i] = str[length - 1] = temp;
}
}
int main() {
char sentence[100];
printf("请输入小明同学写的句子:");
fgets(sentence, sizeof(sentence), stdin); // 读入一行字符串
sentence[strcspn(sentence, "\n")] = '\0'; // 去除换行符
reverse_string(sentence); // 反转字符串
printf("反转后的句子:%s\n", sentence);
return 0;
}
```
在这个程序中,`reverse_string()` 函数接收一个字符串作为输入,然后通过双指针法交换字符的位置,实现了字符串的反转。在`main()`函数中,我们获取用户输入,然后调用这个函数处理。
相关问题
用C语言代码实现:小明同学写单词的时候喜欢反着写,比如 hello 他会写成 olleh。给出小明同学写的一个句子,请你将所有的单词复原。输入:共一行,一个字符串表示句子;输出:单词之间以空格分隔。每个单词一行。
在C语言中,我们可以遍历输入字符串,对于每一个单词,我们从后向前取字符并拼接成一个新的单词,直到遇到空格或者字符串结束。以下是简单的实现:
```c
#include <stdio.h>
#include <string.h>
void reverse_words(char* sentence) {
int start = 0;
for (int i = strlen(sentence) - 1; i >= 0; i--) { // 从后往前遍历
if (sentence[i] == ' ') { // 找到单词边界
char word[strlen(sentence) + 1]; // 新建一个单词数组
strncpy(word + 1, &sentence[start], i - start); // 反向复制单词内容到新数组
word[0] = '\0'; // 添加空字符作为单词结尾
printf("%s\n", word); // 输出单词
start = i + 1; // 更新开始位置
}
}
if (start != strlen(sentence)) { // 处理最后一个单词
char word[strlen(sentence) + 1];
strncpy(word + 1, &sentence[start], strlen(sentence) - start);
word[0] = '\0';
printf("%s\n", word);
}
}
int main() {
char input_sentence[100];
fgets(input_sentence, sizeof(input_sentence), stdin);
input_sentence[strcspn(input_sentence, "\n")] = '\0'; // 移除换行符
reverse_words(input_sentence);
return 0;
}
```
在这个程序中,`reverse_words`函数接受一个字符串作为输入,然后逐个反转单词。注意这里假设输入字符串不会包含连续的空格。
C语言小明同学写单词的时候喜欢反着写,比如 `hello` 他会写成 `olleh`。给出小明同学写的一个句子,请你将所有的单词复原。 【输入形式】共一行,一个字符串表示句子,单词之间以空格分隔。句子以回车结束。 【输出形式】每个单词一行。
这是一个简单的字符串处理问题。我们可以使用C语言的字符数组和循环来解决。以下是一个示例程序:
```c
#include <stdio.h>
#include <string.h>
void reverse_words(char *sentence) {
int start = 0;
while (*sentence) {
// 找到单词的开始位置
if (*sentence == ' ') {
// 反转从start到当前位置的单词
for (int i = start; i < sentence - start; ++i) {
char temp = sentence[i];
sentence[i] = sentence[start + i];
sentence[start + i] = temp;
}
// 移动start到下一个单词的开始
start = ++sentence;
} else {
++sentence;
}
}
// 反转最后一个单词
if (start != 0) { // 防止数组越界
for (int i = start; i < strlen(sentence); ++i) {
char temp = sentence[i];
sentence[i] = sentence[start + i - 1];
sentence[start + i - 1] = temp;
}
}
}
int main() {
char input[100]; // 假设输入不超过100个字符
fgets(input, sizeof(input), stdin);
// 移除换行符
input[strcspn(input, "\n")] = '\0';
reverse_words(input);
printf("%s", input); // 输出反转后的句子
return 0;
}
```
【相关问题】:
1. 这段代码如何找到并反转每个单词?
2. 输入字符串超过100个字符会怎样?
3. 如何改进这段代码以处理连续的空格?
阅读全文