函数invertNumerSubstrings不起作用

时间:2014-10-24 18:44:52

标签: c string char ansi-c

我在Ansi C中有这个问题

3创建一个函数,接收每个解码的20个字符的字符串数组,考虑以下因素: 一个。从左到右阅读,数字表示从那里投入多少字符(投资的字符之间可以是数字,为此,    被认为是普通人物。) 湾数字字符应替换为字符串反转的第一个字符。

实施例。字符串aj5pr2 * dfkl3abc2qwe1azk必须是ajd * 2rpfklcbawqeazk

使用符号和指针算法

#include <stdio.h>
#include <string.h>

#define TAM 20


char* invertNumerSubstrings(char*);

int main()
{
    char chain[TAM];
    printf("\n Ingrese chain: ");
    gets(chain);
    fflush(stdin);
    char result;
    result=invertNumerSubstrings(chain);
    printf("\n Chain modified: ");
    puts(chain);
    printf("\n");   
    return 0;
}

char* invertNumerSubstrings(char* chain)
{
    int flag =0;
    char *pl= chain;
    char *pe= chain;
    char aux;
    while(*pl=='\0'&& *pe=='\0');
    {
        if(!(*pl=='1')&&(*pe=='9'))
        {
            pl++;
            pe++;
        }
        else
        {

            if(flag ==0)
            {
                pe=*pl;
                flag=1;
                pl--;
            }
            if(*pe<*pl)
            {
                aux=*pl;
                *pl=*pe;
                *pe=aux;
            }
        }
    }
    return *chain;
}

该程序没有编译错误但没有工作

2 个答案:

答案 0 :(得分:1)

在我尝试时会发出编译器警告 - 在您声明的main()

char result; result=invertNumerSubstrings(chain);

但该函数的类型为char*。但是,你甚至不能使用result

更严重的是,在您放置的函数while(*pl=='\0'&& *pe=='\0');中注意错误的尾随;如果chain没有内容,则此语句将永久执行,但只有一次,否则后续代码块只执行一次。

答案 1 :(得分:1)

您的代码中存在许多问题。指着他们中的一些。在函数main()

char result;
result=invertNumerSubstrings(chain);

函数invertNumerSubstrings的返回类型为char*,与result的类型不匹配。

while(*pl=='\0'&& *pe=='\0');
上述语句中的

;在逻辑上是不正确的,这可能导致在满足条件的情况下无限执行循环。根据问题的需要,*pl=='\0'&& *pe=='\0'条件看起来并不完美(如果我错了,请纠正我。)

return *chain; 

return语句是函数invertNumerSubstrings的最后一个语句,其返回类型与char*不匹配。

要获得所需的输出,您可以尝试:

void invertNumerSubstrings(char* chain)
{

char *pl= chain;
char* chain_ptr=chain;   // chain_ptr to hold starting address of chain
char* final=(char*)malloc(sizeof(chain));
char* final_ptr=final;  // // final_ptr to hold starting address of final
memset(final, '\0', sizeof(chain));

while(*pl!='\0')
{

    if(*pl>=49 && *pl<=57) //
    {   
         int shift=*pl-48; // to find the shift amount
         int i=0;
         *pl++;

         for(i=shift-1; i>=0; i--){
             *final=*(pl+i);
             final++;
         }
       pl=pl+shift;  // seek the pointer to correct position            
    }

     else
         {
              *final=*pl;
               pl++;
               final++;

         }
}

chain=chain_ptr; // assign original address of chain to chain again

while(*final_ptr !='\0'){
      *chain=*final_ptr ;
      final_ptr++;
      chain++;             
}
*chain='\0';

free(final);

}

假设:当在字符串中遇到整数时,其后续字符串的长度至少等于整数值。