문자열 과 배열

3832 단어
문자열 과 배열
1. 배열 반복 요소
배열 a [N] 에 1 ~ N - 1 개의 수 를 저장 하 였 으 며, 그 중 한 개의 수 는 한 번 반복 되 었 다.중복 요 소 를 찾 으 려 면 시간 복잡 도 는 O (N) 여야 합 니 다.
  • 이 또는 법
  • 와 차 법
  • 해시 표
  • 참조: 배열 중복 요소 값 구하 기
    2. 배열 과 지침 의 차 이 를 약술 한다.
    포인터
    배열
    데이터 저장 주소
    데이터 저장
    간접 접근 데이터
    직접 접근 데이터
    보통 동적 데이터 구조 에 사용
    보통 고정 수량 유형 이 같은 요 소 를 저장 하 는 데 사 용 됩 니 다.
    관련 조작 new, delete 등
    암시 적 할당 및 삭제
    또 한 가지 일 깨 워 줄 것 은:
    char a[] = "abcdefg";  //       (    )
    char *p = "abcdefg";  //      (     )
    

    C / C + + 에 서 는 포인터 가 초기 화 될 때 만 든 문자열 을 읽 기 전용 으로 정의 합 니 다.
    3. 배열 의 오프셋
    다음 프로그램 을 실행 하여 출력 결 과 를 구 합 니까?
    #include 
    
    using namespace std;
    
    int main()
    {
        int a[5] = {1, 2, 3, 4, 5};
        int* ptr = (int*)(&a + 1);
        cout << *(a + 1) << ", " << *(ptr - 1);
        return 0;
    } 
    

    출력 결과: 2, 5
    이 문 제 는 a 와 a 의 차 이 를 고찰 한다.
    & a + 1 은 첫 번 째 주소 + 1 이 아 닙 니 다. 시스템 은 a [] 의 오프셋 을 더 한 것 이 배열 의 크기 를 오프셋 한 것 이 라 고 생각 합 니 다.& a 는 배열 지침 이기 때문에 그 유형 은 int (*) [5] 이다.반면 지침 + 1 은 지침 유형 에 따라 일정한 값 을 더 해 야 하 며, 유형 별 지침 + 1 이후 증가 하 는 크기 가 다르다.
    a 는 길이 가 5 인 int 배열 지침 이기 때문에 5 * sizeof (int) 를 추가 해 야 합 니 다. ptr 는 실제 a [5] 입 니 다.그러나 ptr 는 (& a + 1) 유형 과 다 르 기 때문에 ptr - 1 은 sizeof (int *) 만 뺀 다.
    a. & a 의 주 소 는 같 지만 의미 가 다 릅 니 다. & a 는 대상 (배열) 의 첫 번 째 주소 이 고 a 는 배열 의 첫 번 째 주소 입 니 다. 즉, a [0] 의 주소 입 니 다. a + 1 은 배열 의 다음 요소 의 주소 입 니 다. 즉, a [1] 이기 때문에 출력 결 과 는 2 입 니 다.a + 1 은 다음 대상 의 주소, 즉 a [5] 이기 때문에 ptr - 1 의 값 은 a [4] 이기 때문에 출력 결 과 는 5 입 니 다.
    4. 다 차원 배열 의 출력
    int a[2][2][3] = {{{1, 6, 3}, {5, 4, 15}}, {{3, 5, 33}, {23, 12, 7}}};
    for (int i = 0; i < 12; i++)
        cout << ______ << endl;
    

    빈 칸 에 적당 한 문 구 를 쓰 고 a 의 숫자 를 순서대로 출력 합 니 다.
    a[i / 6][(i / 3) % 2][i % 3]
    첫 번 째, 여섯 번 째 순환 은 모두 0 을 취하 고 여섯 번 째 순환 은 모두 1 을 취하 기 때문에 i / 6 은 요 구 를 만족 시 킬 수 있다.2 차원, 앞의 세 번 은 0 을 취하 고 세 번 은 1 을 취하 고 세 번 은 0 을 취하 고 세 번 은 1 을 취하 고 계량 화 된 사상 으로 i / 3 은 12 개의 숫자 를 4 조로 나 누 어 각각 3 개 로 0, 1, 2, 3 으로 계량 화 시 켰 다. 0, 1, 0, 1 을 얻 기 위해 여 기 는 나머지 가 필요 하기 때문에 (i / 3)% 2 가 있다.3 차원 은 (0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2) 이 필요 하기 때문에 i% 3 이 있다.
    5. 문자 배열 의 입력
    5 개국 의 영어 이름 을 입력 하고 영어 이름 의 이니셜 을 찾 아 출력 하 며 알파벳 순 으로 맨 앞 에 있 는 그 나라 의 이름 을 입력 하 세 요.
    #include 
    #include 
    
    using namespace std;
    
    int main()
    {
        char a[5][30];
        char c[30];
        int i;
        for (i = 0; i < 5; i++)
            cin.getline(a[i], 30, '
    '); strcpy(c, a[0]); for (i = 5; i > 1; i--) if(strcmp(c, a[i]) > 0) strcpy(c, a[i]); cout << c << endl; return 0; }

    6. 문자열 관련 함수
  • strcpy (a, b): b 의 문자열 을 a 에 복사 합 니 다. 주의: (1) a 의 길 이 는 b 보다 커 야 합 니 다.(2) a 는 배열 이름 이 어야 합 니 다. b 는 배열 이름 일 수도 있 고 문자열 일 수도 있 습 니 다.(3) 복사 작업 수행 내용 은 '\ 0' 을 포함한다.(4) 복사 작업 은 일부 배열 의 길 이 를 복사 할 수 있 습 니 다 (예 를 들 어 strcpy (a, b [1], 5).
  • strcmp (a, b): a, b 문자열 에 대응 하 는 문 자 를 비교 합 니 다. 주의: (1) 인자 a 와 b 문자열 이 같 으 면 0 을 되 돌려 줍 니 다.a. b 보다 크 면 0 이상 의 값 을 되 돌려 줍 니 다.a. b 보다 작 으 면 0 보다 작은 값 으로 돌아 갑 니 다.(2) 대소 문 자 를 구분한다.
  • strcat (a, b): b 문자열 을 a 뒤에 연결 합 니 다. (1) a 배열 은 충분 해 야 합 니 다. 적어도 두 문자열 을 동시에 수용 하 는 길 이 를 만족 시 켜 야 합 니 다.(2) 연결 작업 시 a 배열 에 있 는 '\ 0' 이 삭 제 됩 니 다.
  • strlen: 길이 계산 조작
  • strlwr: 대문자 소문 자
  • strupr: 소문 자 대문자
  • 7. strcpy 함수 와 memcpy 함 수 는 어떤 차이 가 있 습 니까?그들 은 각자 사용 할 때 어떤 문 제 를 주의해 야 합 니까?
  • 차이 점: strcpy 함수 작업 의 대상 은 문자열 로 원본 문자열 에서 목적 문자열 까지 의 복사 기능 을 완성 합 니 다.memcpy 함 수 는 말 그대로 메모리 복사 로 하나의 메모리 블록 의 내용 을 다른 메모리 블록 으로 복사 하 는 기능 을 실현 합 니 다.
  • 주의해 야 할 문제: 문자열 복사 에 있어 둘 다 실현 할 수 있다.그러나 비 문자열 류 의 데이터 복사 에 있어 서 는 memcpy 함수 만 사용 할 수 있 습 니 다.
  • 좋은 웹페이지 즐겨찾기