C 언어 가 문자열 을 역순 으로 출력 하 는 실례

문자열 을 역순 으로 출력 합 니 다:제 오류 코드 를 먼저 말씀 드 리 겠 습 니 다.처음에는 어디 가 틀 렸 는 지 모 르 겠 지만 그 당시 의 생각 은 독선 적 이 었 습 니 다.제 오류 코드 를 먼저 보 셔 도 됩 니 다.
이 코드 는 잘못된 것 입 니 다.정확 한 것 은 맨 아래 에 있 습 니 다.서 두 르 지 마 세 요.저 는 제 잘못 을 보 여 드 리 는 것 뿐 입 니 다.하하.

#include <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;
void reverse(char a[])
{
  char *p=a,*q=a,c;
  int i;
  while(*p!='\0')
    p++;
  p--;//  p        
//  while(p>q)
//  {
//    c=*p;
//    *p=*q;
//    *q=c;
//    p--;
//    q++;
//  }
  i=0;
  for(i=0; p>=q; i++)
  {
    a[i]=*(p);//         ,       
    printf("*(p)==%c a[%d]==%c
",*(p),i,a[i]); p--; } } int main() { char a[100]; scanf("%s",a); reverse(a); printf("%s",a); return 0; }
위의 코드:저 는 처음에 포인터 p 를 정의 한 다음 에 마지막 요 소 를 가리 키 고 천천히(앞)손가락 으로 돌아 간 다음 에 포인터 p 가 가리 키 는 값 을 a[i]에 부여 하려 고 했 습 니 다.i 는 0 부터 변화 하기 시 작 했 습 니 다.이 생각 은 틀 리 지 않 았 지만 무시 하 였 습 니 다.지침 은 주 소 를 바 꿀 권리 만 있 고 할당 값 은 문자열 을 완전히 바 꾸 었 습 니 다.그러면 포인터 가 처음에 중간 에 있 는 값 을 가리 킬 때 원래 a 문자열 의 중간 에 있 는 문자 가 바 뀌 었 습 니 다.그러면 포인터 p 가 중간 에 있 는 값 을 가리 킬 때 p 는 이미 변 화 된 a 중의 문자 값 을 말 합 니 다.
그럼 문제 가 생 겼 습 니 다.어떻게 하 시 겠 습 니까?대칭 적 인 위치 에 있 는 문 자 를 교환 하면 됩 니 다.
다음은 정확 한 코드 입 니 다.비교적 간단 합 니 다.소 개 를 많이 하지 않 겠 습 니 다.

#include <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;
void reverse(char a[])
{
  char *p=a,*q=a,c;
  int i;
  while(*p!='\0')
    p++;
  p--;//  p        
  while(p>q)
  {
    c=*p;
    *p=*q;
    *q=c;//          
    p--;
    q++;
  }
}
int main()
{
  char a[100];
  scanf("%s",a);
  reverse(a);
  printf("%s",a);
  return 0;
}
보충:C 언어 는 문자열 을 정수,정렬(역순)출력 으로 변환 합 니 다.
문자열 이 숫자 로 바 뀌 었 습 니 다:'0'
숫자 가 문자열 로 바 뀌 었 습 니 다:+'0'

#include <stdio.h>
#include <stdlib.h>
#include <vld.h>
#include <assert.h>
#include <ctype.h>
#include <string.h> 
void Reverse(char *str)  //  
{
	char *p = str;
	while(*p != '\0')  //  \0
	{
		p++;
	}
	p--;  //\0   
 
	int temp;
	while(str < p)  
	{
		temp = *str;  //  
		*str = *p;
		*p = temp;
		str++;
		p--;
	}
} 
 
int Myatoi(const char *str)  //        
{
	assert(*str != NULL);
	int sum = 0;
	while(isdigit(*str))
	{
		sum = sum*10+*str-'0';
		*str++;
	}
	return sum;
}
 
void Myitoa(char *str,int n)  //        
{
	assert(*str != NULL);
	int i = 0;
	do{
		str[i++] = n % 10 + '0'; 
		n /= 10;
	}while(n != 0);
	str[i] = '\0';
//	Reverse(str);
}
 
int main()
{
	char str1[100] = "1a2";
	printf("num = %d
",Myatoi(str1)); char str[100]; Myitoa(str,1235496); printf("str = %s
",str); return 0; }

이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.만약 잘못 이 있 거나 완전히 고려 하지 않 은 부분 이 있다 면 아낌없이 가르침 을 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기