首页 > 代码库 > 字符串反转&单词反转-小米电视
字符串反转&单词反转-小米电视
方法一:先是全字符反转,然后再以空格为界定符反转单词。
#include<stdio.h>
#include<string.h>
string_change(char * p, int start, int end) //字符反转
{
int i,len;
char temp;
len = strlen(p);
while(start<=end)
{
temp = p[start];
p[start] = p[end];
p[end] = temp;
start++;
end--;
}
}
int main(void)
{
char a[20] = "abc def ghi ";
int i, start, end, tag = 0;
printf("%s\n",a);
string_change(a, 0, strlen(a)-1);
for(i = 0; i <= strlen(a); i++)
{
if((a[i] == ‘ ‘ ||a[i] == NULL) && tag == 1)
{
string_change(a, start, end);
tag = 0;
continue;
}
if(a[i] != ‘ ‘)
{
switch(tag)
{
case 0:tag = 1; //单词开始
start = i; //单词开始位置
break;
case 1:end = i;
break;
}
}
}
printf("%s\n",a);
return 0;
}
方法二:找到每个单词开始的位置,然后反转。【转载】
int ReverseWords(char *str,char *resultWords[])
{
int wordStart = 0; /* 判断单词是否开始,注意初始化 */
int wordCount = 0; /* 统计单词个数,注意初始化 */
char *tempWords[256]; /* 指针数组,用来存放每个单词的起始地址 */
int i; /* 循环控制变量,遍历原始字符串 */
int j; /* 循环控制变量,控制单词地址 */
for (i = 0; str[i] != ‘\0‘; i++)
{
if (str[i] == ‘ ‘) /* 如果当前字符为空格,则表示不是单词 */
{
wordStart = 0; /* 表示符置零 */
str[i] = ‘\0‘; /* 将非字母全部填充为\0 */
}
else /* 如果当前字符不是空格,但是前面一个字符是空格,表示单词开始 */
if (wordStart == 0 )
{
wordStart = 1; /* 单词开始 */
tempWords[wordCount++] = &str[i]; /* 每个单词开始的字母的地址 */
}
}
for (j = 0; j < wordCount; j++)
{
resultWords[j] = tempWords[wordCount - 1 - j]; /* 逆转,为了逆序输出 */
}
return wordCount; /* 返回单词个数 */
}
int main(void)
{
char str[] = "I love China forever.";
printf("");
char *resultWords[256]; /* 指针数组,用来存放结果单词的起始地址 */
int wordCount = ReverseWords(str,resultWords); /* 调用 */
int i;
for (i = 0; i < wordCount; i++)
{
printf("%s ",resultWords[i]);
}
putchar(‘\n‘);
return 0;
}
字符串反转&单词反转-小米电视