programing

C의 문자 배열 길이 찾기

goodcopy 2022. 7. 26. 22:51
반응형

C의 문자 배열 길이 찾기

C에서 문자 배열의 길이를 찾을 수 있는 방법은 무엇입니까?

의사 코드를 기꺼이 받아들이지만, 쓰고 싶다면 그것을 쓰는 것을 싫어하지는 않습니다. :)

이 char일 null 삭제,

char chararray[10] = { 0 };
size_t len = strlen(chararray);

배열이 있는 경우 배열의 크기를 각 요소의 크기(바이트)로 나누면 배열 내의 요소 수를 알 수 있습니다.

char x[10];
int elements_in_x = sizeof(x) / sizeof(x[0]);

char부터, syslogsizeof(char) == 1,sizeof(x)을 사용하다

배열에 대한 포인터만 있는 경우 가리킨 배열의 요소 수를 찾을 수 없습니다.그건 네가 직접 기록해야 해.예를 들어 다음과 같습니다.

char x[10];
char* pointer_to_x = x;

으로는 알 수pointer_to_x10개의 요소가 배열되어 있음을 나타냅니다.당신이 직접 그 정보를 추적해야 합니다.

여러 의 수를 할 수도 의 내용을 입니다). 즉, 는 변수로 할 수도 있습니다.변수에 요소의 수를 저장할 수도 있고, 내용을 분석하여 배열의 크기를 얻을 수도 있습니다(이는 Null 종단 문자열이 실제로 수행하는 작업입니다.즉, 변수에서 요소의 수를 저장할 수도 있습니다).'\0'문자열 끝의 문자)를 사용하여 문자열이 언제 종료되는지 알 수 있습니다.

앞의 답변은 괜찮지만, 여기 제 기고가 있습니다.

//returns the size of a character array using a pointer to the first element of the character array
int size(char *ptr)
{
    //variable used to access the subsequent array elements.
    int offset = 0;
    //variable that counts the number of elements in your array
    int count = 0;

    //While loop that tests whether the end of the array has been reached
    while (*(ptr + offset) != '\0')
    {
        //increment the count variable
        ++count;
        //advance to the next element of the array
        ++offset;
    }
    //return the size of the array
    return count;
}

주요 함수에서는 배열의 첫 번째 요소의 주소를 전달하여 크기 함수를 호출합니다.

예를 들어 다음과 같습니다.

char myArray[] = {'h', 'e', 'l', 'l', 'o'};
printf("The size of my character array is: %d\n", size(&myArray[0]));

stren을 사용할 수 있습니다.

strlen(urarray);

어떻게 동작하는지 이해할 수 있도록 직접 코드를 작성할 수 있습니다.

size_t my_strlen(const char *str)
{
  size_t i;

  for (i = 0; str[i]; i++);
  return i;
}

어레이 크기를 원하는 경우 size off를 사용합니다.

char urarray[255];
printf("%zu", sizeof(urarray));

를 사용합니다.sizeof(array)/sizeof(array[0]) " " " 를 사용합니다strlen(array).

다음 기능을 사용할 수 있습니다.

int arraySize(char array[])
{
    int cont = 0;
    for (int i = 0; array[i] != 0; i++)
            cont++;
    return cont;
}

sizeof() 사용

char h[] = "hello";
printf("%d\n",sizeof(h)-1); //Output = 5

사용, string.h

#include <string.h>

char h[] = "hello";
printf("%d\n",strlen(h)); //Output = 5

사용함수(strlen 실장)

int strsize(const char* str);
int main(){
    char h[] = "hello";
    printf("%d\n",strsize(h)); //Output = 5
    return 0;
}
int strsize(const char* str){
    return (*str) ? strsize(++str) + 1 : 0;
}

strlen에 의지하고 싶지 않다면 컴팩트한 형태도 있습니다.고려 중인 문자 배열이 "msg"인 경우:

  unsigned int len=0;
  while(*(msg+len) ) len++;

"문자 배열"이라고 하면 문자열을 의미합니까?'안녕하세요'나 '하하하' 같은 글자가...

어쨌든 strlen()사용합니다.좀 읽어보세요. 여기처럼 많은 정보가 있습니다.

음, 11년 후, 저는 대학 과제에서 이 문제에 부딪혔습니다.제가 찾은 솔루션은 과제에서 요구하는 함수 시그니처를 변경하지 않고도 작동했습니다.

제 경우 아이템이 존재하는지 또는 아이템 Prefix(Bana의 경우 'B' 등)가 이미 문자 배열 item Prefix에 존재하는지 여부에 따라 아이템 인덱스를 반환하는 함수를 만들어야 했습니다.

그래서 저는 이걸 써야 했어요for루프(또는 루프)문제는 할당이 각 기능에 대해 특정 시그니처를 부여하고 해당 기능에 대해 특정 시그니처를 부여하지 않았다는 것입니다.count에 있던 변수main()인수로 기능하다

난 즉흥적으로 행동해야 했어

위의 두 가지 방법 모두 효과가 없었습니다. strlen()의도한 대로 동작하지 않았다.'\0'문자열의 끝 문자.sizeof()또한 메서드는 요소의 수가 아닌 인수로 전달된 문자 배열의 포인터 크기를 반환했기 때문에 작동하지 않았습니다.

이게 제가 생각해낸 기능이에요.현재 문자가 다음 상태인지 여부를 확인하는 단순 while 루프NULL(또는0).

void charArrLength(char array[]) {
    int arrLength = 0;
    
    while (array[arrLength] != 0) {
        arrLength++; //increment by 1
    } 
    
    printf("Character array has %d elements", arrLength);
}

하지만 이게 먹히려면main()기능에서는, 문자 배열을 문자 포인터로서 선언한 후, 최종적으로 어레이내에 포함할 아이템의 수에 근거해 필요한 메모리를 할당할 필요가 있습니다.

void charArrLength(char array[]) {
    int arrLength = 0; 
    
    while (array[arrLength] != 0) {
        arrLength++; 
    } 
    
    printf("Character array has %d elements", arrLength); //should give 33
} 

int main() { 
    char *array; //declare array as a pointer
    int arraySize = 33; //can be anything 
    
    array = (char*) malloc(arraySize * sizeof(char)); 
    
    charArrLength(array);

    free(array); //free the previously allocated memory
}

아래에서는 과제에서 이 기능을 어떻게 활용했는지 보여 줍니다.

우선, 제 요구에 맞춘 위의 기능을 소개합니다.

int isItemExists(char itemPrefixes[], char itemPrefix) {
    int count = 0; //declare count variable and set to 0
    int itemIndex = -1; //declare item index variable and set it to -1 as default

    while (itemPrefixes[count] != 0) {
        count++;
    }

    for (int i = 0; i < count; i++) {
        if (itemPrefix == itemPrefixes[i]) {
            itemIndex = i; //if item exists, set item index to i
        }
    }

    return itemIndex;
}

그럼 제가 어떻게 선언했냐면itemPrefixes로 정렬하다.main()기능 및 필요한 메모리를 할당하는 방법n (사용자가 추가할 항목의 수)itemPrefixes어레이)

char *itemPrefixes;
    
int n = 0; //number of items to be added variable

printf("> Enter how many items to add: ");
scanf("%d", &n);

//allocate n * size of char data type bytes of memory
itemPrefixes = (char*) malloc(n * sizeof(char));

그리고 마지막으로, 이것이 그 기능이 사용된 방법입니다.

do {
    printf("\n\n> Enter prefix for item %d: ", i + 1);
    scanf(" %c", &itemPrefix);
    
    //prompt the user if that itemPrefix already exists
    if (isItemExists(itemPrefixes, itemPrefix) != -1) {
        printf("\nItem prefix already exists! Try another one.\n");
    }
} while (isItemExists(itemPrefixes, itemPrefix) != -1);

또, 코드의 마지막에, 이전에 할당되어 있던 메모리를 해방합니다.

free(itemPrefixes);

다시 말씀드리지만 조건이 달랐다면 훨씬 더 쉬웠을 것입니다.그 과제는 통과하지 못하는 것에 대해 엄격했다.n의론으로서.그래도, 나는 미래에 이것을 찾고 있는 다른 누군가를 돕고 싶다!

만약 누군가 이것을 보고 더 간단한 제안이 있다면, 주저하지 말고 말해 주세요.

언급URL : https://stackoverflow.com/questions/4180818/finding-the-length-of-a-character-array-in-c

반응형