首页 > 代码库 > 字符串反转&单词反转-小米电视

字符串反转&单词反转-小米电视

方法一:先是全字符反转,然后再以空格为界定符反转单词。

#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;

}

字符串反转&单词反转-小米电视