读书人

这神马情况哦?该怎么处理

发布时间: 2012-04-26 14:01:31 作者: rapoo

这神马情况哦?
具体的问题需要执行一次才知道?

我编的函数是为了把一个字符串颠倒 (似乎是实现了,但又没实现)


#include<stdio.h>
#include<string.h>
void dx(char *a)
{
int i=0,j=0;
char b[100];
j=strlen(a);
while(*a!='\0')
{
a++;
}
a--;
while(j!=0)
{
b[i]=*a;
a--;
i++;
j--;
}
b[i]='\0';

puts(b); //这儿的b输出来都是对的
strcpy(a,b);
puts(a); //这儿的a输出来都是对的
}
void main()
{
char str[100];
printf("please enter a string:");
gets(str);
dx(str);
printf("after dx:");
puts(str); //总是少掉一个字符
}

这个应该怎么改?

[解决办法]
j=strlen(a);
这个就不对了,应该作为一个参数
[解决办法]

C/C++ code
    while(j != 0)    {        b[i]=*a;        a--;        i++;        j--;    }    ++a;//这个地方要把a指向首地址
[解决办法]
C/C++ code
#include<climits>#include<string>#include<iostream>#include<sstream>#include<bitset>using namespace std;#include "stdio.h"#include<stdio.h>#include<string.h>void dx(char *a){    int i=0,j=0;    char b[100];    j=strlen(a);    while(*a!='\0')    {        a++;    }    a--;    while(j!=0)    {        b[i]=*a;        a--;        i++;        j--;    }    b[i]='\0';    a++;//////////// add.. 指向开始的地方.    puts(b); //这儿的b输出来都是对的    strcpy(a,b);    puts(a); //这儿的a输出来都是对的}int main(){    char str[100];    printf("please enter a string:");    gets(str);    dx(str);    printf("after dx:");    puts(str); //总是少掉一个字符    return 0;}int maind(){    int a,b;    char buf[16];    char str[1024]="1 2 3 4 5 3 5 6";    int off=0;    while(sscanf(str+off,"%d%[\t\n ]%d",&a,buf,&b)==3)    {        off+=printf("%d%s%d\n",a,buf,b);        off--;    }    char s[99];    int cout1=0,cout2=0,cout3=0,cout4=0,i=0;    scanf("%s",s);    while(1)    {        if(s[i]>='0' && s[i]<'9')            cout1++;        else        {            if(s[i]>='A' && s[i]<='Z')                cout2++;            else            {                if(s[i]>='a' && s[i]<='z')                    cout3++;                else                {                    cout4++;                }            }        }        i++;        if(s[i]!='q' && s[i]!='Q')            break;    }    printf("数字%d个 大写字母%d个 小写字母%d个 其他个%d",cout1,cout2,cout3,cout4);    return 0;}string true_form_long(const string& complement){    bitset<sizeof(long)*8> bits(complement);    unsigned long val = bits.to_ulong();    if(val > (unsigned long)LONG_MAX)    {        return bitset<sizeof(long)*8>(~val+1).to_string();    }    return complement;}int main1(){    string str="1000001111000011010010010";    bitset<32> a(str);    cout<<a.to_ulong()<<endl;    cout<<true_form_long(str)<<endl;}
[解决办法]
C/C++ code
#include<stdio.h>#include<string.h>void dx(char *a){    int i = 0, j = 0;    char b[100] = {0};    char *p = a;    j = strlen(p);    while(*p != '\0')    {        p++;    }    p--;    while(j != 0)    {        b[i] = *p;        p--;        i++;        j--;    }    b[i] = '\0';    puts(b);    strcpy(a, b);      puts(a);}void main(){    char str[100];    printf("please enter a string:");    gets(str);    dx(str);    printf("after dx:");    puts(str); //总是少掉一个字符   } 


[解决办法]
void dx(char *a)
{
int i=0,j=0;
char b[100];
j=strlen(a);
while(*a!='\0')
{
a++;
}
while(j!=0)
{
b[i++]=*--a;
j--;
}
b[i]='\0';
puts(b); //这儿的b输出来都是对的
strcpy(a,b);
puts(a); //这儿的a输出来都是对的
}
[解决办法]

C/C++ code
strcpy(a,b);  // 此时指针a已经不再指向str数组首地址了                // 可以看看4楼的代码,指针运算时改变的是p,                // 所以最后的strcpy时,a仍指向数组str首地址puts(a);...puts(str);
[解决办法]
#include <stdio.h>
#include <string.h>

int reverse(char * src)
{
char *temp = src;
//save the first address of src
int count = 0;
int i = 0;
char stack[100];

if ('\0' == *temp)
return -1;//src is null

while ('\0' != *temp){
stack[count] = *temp;//save into the stack
temp++;
count++;
}

temp = src;//reset
if (1 == count){
return 0;//only one character
}else {
while (i != count){
*(temp + i) = stack[count - i - 1];//exchange the data
i++;
}
}

return 1;
}

int main()
{
char test[] = "abcdefghijk123456789";
printf("%s\n",test);
reverse(test);
printf("%s\n",test);

return 0;
}

读书人网 >C语言

热点推荐