这神马情况哦?
具体的问题需要执行一次才知道?
我编的函数是为了把一个字符串颠倒 (似乎是实现了,但又没实现)
#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;
}