2012-07-18 2 views
0

사용자 이름을 입력하는 wxwidgets로 설계된 UI가 있습니다. 10 진수로 변환 할 모든 요소의 16 진수 합계를 원합니다. 이것이 내가 한 일입니다.문자열/배열 요소의 16 진수를 계산 한 다음이를 십진수로 변환하십시오.

wxArrayString TextAlia = wxT("");//declared global 

    TextBox1 = new wxTextCtrl(this, TEXT_BOX1, wxT(""), wxPoint(300, 10), wxSize(100, 20), wxTE_PROCESS_ENTER | wxTE_PROCESS_TAB | wxTE_LEFT, wxDefaultValidator, wxT("WxTextBox")); 


void MyFrame::OnGenerateKey(wxCommandEvent& WXUNUSED(event)) { 
int i; 
char name[i]; 

TextAlia = TextBox1->GetValue(); 

i = strlen(TextAlia); 
for (i = 0; i < strlen(TextAlia); i++) { 


char buffer[3];char Temp[3]; 

_itoa(name[i], buffer, 16); 

} 

이것은 내가 도와 주려고 시도한 것입니다. 이제 ID가 무슨 짓을

은 다음과 같습니다

int lengtharray = sizeof(name)/sizeof(name[0]); 

for (int j=0; j<lengtharray; j++) 
{ 
    name[j] = ?//i need to write something here so that the name[1] is changed to 45 for  
    capital "E" 
    // avariable may be of type hex just like sum that keeps on incrementing the value 

} 
+0

실제로 사용자 이름으로 무엇을하고 싶습니까? 분명하지 않아. – BoBTFish

+0

무엇이 문제입니까? – PermanentGuest

+0

사용자 이름과 함께 원하는 것은 사용자 이름의 문자를 16 진수 값으로 변경 한 다음이 16 진수 값의 합계가되어야한다는 것입니다. –

답변

1
i = strlen(TextAlia); 
int sum = 0; 
for (int j = 0; j < i; ++j) { 
    sum += TextAlia[j] 
} 

char* a = new char[40]; 
sprintf(a, "%d", sum); // decimal value 
sprintf(a, "%x", sum); // hexadecimal value 
+0

이걸 사용해 보자. –

+2

'sum + = name [j]'를 의미한다. 모호한 변수 명명의 몰락. – tinman

+0

@Anton Roth : 당신은 내가 왜 이름을 써야하는지 이해하지 못한다. [j] TextAliaso에 문자열이있다. 이유 이름 [i] –

2

난 당신이 문자열의 문자 수 표현을 합계를 제대로 이해한다면. 나는 wxwidgets에 익숙하지 않다. 자신의 문자열 유형을 사용한다고 생각하지만, C 스타일의 문자열과 C++로 처리하는 방법을 보여줄 것이다. std::string. 첫 번째로 주목해야 할 점은 char은 최소한 0에서 127까지의 숫자를 저장할 수있는 숫자 형식 일 뿐이므로 합계에서 직접 사용할 수 있습니다. 그것은 당신이 그것을 밖으로 인쇄 할 때 그것은 알아볼 수있는 글자로 변합니다.

여기 간단한 프로그램을 붙여 넣었습니다 : http://ideone.com/dqIE5 문자열의 문자를 반복하여 합계하는 방법을 보여주는 두 가지 함수가 있습니다. 두 경우 모두 문자에 대해 반복문을 작성하여 합계를 더합니다.

표시하는 코드에 몇 가지 오류가 있습니다. 먼저 :

int i; 
char name[i]; 

두 가지 실수가 있습니다. i을 초기화하지 않고 사용하려고합니다 (값 지정). 얼마나 큰 당신이 name 될 것으로 기대합니까? 둘째, 배열의 크기는 컴파일 타임에 알려진 상수 여야합니다.

i = strlen(TextAlia); 
for (i = 0; i < strlen(TextAlia); i++) { 

당신은 TextAlia의 길이에 i를 설정 한 다음 즉시 0로 설정 : 그래서 당신은

const int i = 10; 
char name[i]; 

같은 또 다른 가능성 실수를 뭔가를 할 수 있습니다. 그런 다음 strlen에 계속해서 전화하십시오. 아마도 원하는 내용 :

int length = strlen(TextAlia); 
for (i = 0; i < length; ++i) { 
+0

+1 : 좋은 지적, 첫 번째 실수를 놓쳤습니다. –

관련 문제