как назначить символ массива? - PullRequest
0 голосов
/ 09 марта 2011
int compress(char str[]) {

  char tempStr [256];
  int i,j, counter=0;


     if (!isdigit(str[i]) && (!isspace(str[i]))) {
        tempStr[j] = str[i];  
        j++;
        printf("%c", tempStr[i]); 
     } else {
        counter++;
     }

     str = tempStr;
}

char str[] = "abc abc abc 123";
result = compress(&str);

Вопрос:

  1. как присвоить str char tempStr?
  2. как заменить str на tempStr в функцииcompress?Я думаю str = tempStr не так

спасибо

Ответы [ 4 ]

1 голос
/ 09 марта 2011

1.Ваш код не определен как tempStr, например char tempStr [LENGTH] , убедитесь, что LENGTH достаточно велико.2.Строка должна заканчиваться символом '\ 0', поэтому вам нужно установить tempStr [j] = '\ 0' после цикла (думаю, этого не хватает).Затем вы можете использовать strcpy copy tempStr для str.

1 голос
/ 09 марта 2011

Кажется, вы немного запутались со строками, массивами и указателями.

char str[] = "abc abc abc 123"; означает, что где-то в памяти у вас есть массив с этими символами.при таком объявлении 'str' является константой и не может быть установлен, чтобы указывать куда-то еще.

вместо этого вам нужно назначить каждый отдельный символ, который является своего рода тем, что вы начали делать в своей функции с помощью оператора tempStr[j] = str[i]:

вам нужно перебрать символы в str и проверить каждый символ, затем назначить char для tempStr, который должен быть не меньше, чем исходный массив str [].

что-то вроде

char *tempStr = calloc( strlen( str ) + 1, 1 ); // allocates a buffer +1 char for \0
for (int i = 0, j = 0; i < strlen( str ); ++i)
{
  if (!isdigit(str[i]) && (!isspace(str[i]))) 
  {
    tempStr[j++] = str[i];  
    printf("%c", str[i]); 
  } 
}

теперь вы удалили некоторые символы из str [], однако теперь вам нужно переместить содержимое tempStr в str, это можно сделать с помощью strcpy:

strcpy( str, tempStr );

затем освободите буфер

free( tempStr );

и Боб станет вашим дядей.

0 голосов
/ 09 марта 2011
 char tempStr [256];

tempStr - это массив символов, который может содержать 256 символов.

Но что происходит с этим оператором - str = tempStr;?

Когда выскажем, tempStr, вы получите указатель на первый элемент массива (т.е. & tempStr [0]).Итак, с этим утверждением вы фактически не копируете элементы tempStr в str.Значение r имеет тип char*, но значение l имеет тип char [], что является несовместимым и приводит к ошибке компиляции.

Для фактического копирования элементов массива следует использовать strcpy.

0 голосов
/ 09 марта 2011

Вы должны использовать memcpy или strcpy (если это строка с нулевым окончанием).

В этом примере tempStr не определено, поэтому я предполагаю, что это массив char s. Хотя, возможно, вам понадобится где-то петля ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...