动动手才发现自己现在的在C/C++方向的几个问题:
今天先做一个简单的问题。
问题描述:
翻转句子中单词的顺序
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理
例如:输入“I am a student.”,则输出“student.a am I”。
/* Name: reverse.h Author: suzhou Date: 2014.02.12 Num. 1 */ #include"stdio.h" #include"string.h" void reverseStr(char* str, int i, int j); void reverseWords(char* str);
/*
File: wordsreverse.c
Author: suzhou
Date: 2014.02.12
Num. 1
Question:
翻转句子中单词的顺序。
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“I am a student.”,则输出“student.a am I”。
*/
#include"reverse.h"
/* 字符串反转
*/
void reverseStr(char* str, int i, int j)
{
for (; i < j; i++, j--)
{
char tmp;
tmp = str[i];
str[i] = str[j];
str[j] = tmp;
}
return ;
}
/* 句子反转
*/
void reverseWords(char* str)
{
int i = 0;
char* subStrStart;
char* subStrEnd;
char* currentPos;
currentPos = str;
while(*currentPos!=‘\0‘)
{
subStrStart = currentPos;
while(*currentPos!=‘ ‘ && *currentPos!=‘\0‘)
currentPos++;
subStrEnd = currentPos - 1;
reverseStr(str, (int)(subStrStart - str), (int)(subStrEnd - str));
currentPos++;
}
return;
}
int main()
{
char str[20] = "I am a student.";
reverseStr(str, 0, strlen(str)-1 );
reverseWords(str);
printf("%s\n", str);
return 0;
}
不要认为实现这类基础算法是“重复造车轮”,能说这句话的前提条件是自己有造车轮的能力。好好打牢基础才是现阶段的关键任务。
原文:http://blog.csdn.net/zs634134578/article/details/19136097