#c #arrays
#c #массивы
Вопрос:
Это практическая проблема, которую я пытаюсь решить, но пока мне не везет. Вот что я пробовал до сих пор:
#include <iostream>
using namespace std;
string updateList(char arr[],char key, int n);
int main()
{
char usernames[10];
int sizeOf = 2;
usernames[0] = 'a'; usernames[1] = 'b';
string x = updateList(usernames, 'c', sizeOf);
cout << x;
}
string updateList(char arr[],char key, int n)
{
int arrLength = sizeof(arr)/sizeof(char);
int i;
for (i = 0; i < arrLength; i ) {
if (arr[i] == key) {
return "Username already exists";}
else {
arr[n ] = key;
int arrLength = sizeof(arr)/sizeof(char);
for (i = 0; i < arrLength; i ) {
cout << arr[i];
return "n Username added";
}
} }
}
Будем признательны за любую помощь.
Комментарии:
1. размер массива равен 10 characters…it исправлено. Я думаю, что это должно быть динамическим
2. Ваш код не будет компилироваться. Пожалуйста, исправьте это.
3. В вашем случае
sizeof(arr)
не даст вам размер массива. Лучше использовать std::array , если размер известен во время компиляции, или std::vector , если нет4. Если вы не заблокированы массивом C, вы можете использовать
std::vector
en.cppreference.com/w/cpp/algorithm/find5. Абсолютно правильно. В моем коде было несколько серьезных ошибок, спасибо, что указали на них @TedLyngmo
Ответ №1:
Проблема с вашим подходом заключается в том, что вы не обновляете значение n (sizeOf) и используете n для добавления элемента, который создаст ошибку. вместо этого используйте передачу по ссылке, чтобы n (то есть, e здесь sizeOf будет обновлен) обновился, попробуйте что-то вроде
#include <iostream>
using namespace std;
string updateList(char arr[],char key, int *n);
int main()
{
char usernames[10];
int sizeOf=2;
usernames[0] = 'a'; usernames[1] = 'b';
string x = updateList(usernames, 'c', amp;sizeOf);
cout << x;
int updateList(char arr[],char key, int n)
{
int i;
for (i = 0; i < arrLength; i ) {
if (arr[i] == key) {
return "Username already exists";}
else {
arr[n ] = key;
for (i = 0; i < arrLength; i ) {
cout << arr[i];
}
return 0; } }
}
Ответ №2:
Вы можете использовать string или vector, чтобы поддерживать динамичность массива символов. Это пример строки, и он также действует как массив символов.
#include <iostream>
using namespace std;
int main()
{
string usernames="ab";
char key = 'b';
int i=0;
for(;i<usernames.size();i )
if(usernames[i]==key)
{
printf("Key exists already");
break;
}
if(i==usernames.size())
{
usernames.push_back(key);
cout << usernames <<endl;
}
return 0;
}