MST

星途 面试题库

面试题:C语言字符串指针:单词反转

编写一个C语言程序,使用指针操作,将一个字符串中的每个单词进行反转。例如,输入字符串 "hello world",输出 "olleh dlrow"。要求在原字符串上进行操作,不使用额外的数组,同时要处理字符串中可能存在的多个连续空格以及字符串开头和结尾的空格情况。
36.8万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <ctype.h>
#include <string.h>

void reverse_word(char *start, char *end) {
    while (start < end) {
        char temp = *start;
        *start = *end;
        *end = temp;
        start++;
        end--;
    }
}

void reverse_words(char *str) {
    char *word_start = str;
    while (*str) {
        if (isspace(*str)) {
            if (word_start != str) {
                reverse_word(word_start, str - 1);
            }
            while (isspace(*str)) {
                str++;
            }
            word_start = str;
        } else {
            str++;
        }
    }
    if (word_start != str) {
        reverse_word(word_start, str - 1);
    }
    // 去除开头和结尾的空格
    while (isspace(*word_start)) {
        word_start++;
    }
    char *new_end = word_start + strlen(word_start) - 1;
    while (new_end > word_start && isspace(*new_end)) {
        new_end--;
    }
    *(new_end + 1) = '\0';
    strcpy(str, word_start);
}

int main() {
    char str[1000];
    printf("请输入字符串: ");
    fgets(str, sizeof(str), stdin);
    // 去除fgets读取的换行符
    str[strcspn(str, "\n")] = '\0';
    reverse_words(str);
    printf("处理后的字符串: %s\n", str);
    return 0;
}