2011-12-08 76 views
9

Về cơ bản tôi chỉ muốn lặp qua một chuỗi các ký tự kéo mỗi cái ra và mỗi ký tự phải thuộc loại const char * để tôi có thể chuyển nó vào một hàm. heres một ví dụ. Cảm ơn bạn đã giúp đỡ.C++ chuyển đổi char thành const char *

string thestring = "abc123"; 
    const char* theval; 
    string result; 

    for(i = 0; i < thestring.length(); i++){ 
     theval = thestring[i]; //somehow convert this must be type const char* 
     result = func(theval); 
    } 
+3

làm bạn muốn gọi Func() với "a", sau đó "b" và vân vân? Tại sao? Câu hỏi này khó trả lời. –

Trả lời

13
string sym(1, thestring[i]); 
theval = sym.c_str(); 

Nó cung cấp cho một null-terminated const char * cho mỗi nhân vật.

+2

Không phải của bạn downvoter, nhưng điều này không trả lời câu hỏi OP thực sự yêu cầu. –

+0

đây là chính xác những gì tôi cần làm & thestring [i] đã cho kết quả abc123, bc123, c123, 123, 23, 3. Điều này đã cho tôi mỗi nhân vật cá nhân cảm ơn – user1054513

19

Bạn có thể lấy địa chỉ của yếu tố đó:

theval = &thestring[i]; 
+2

+1: Đây là nó. –

4

thường một const char * được trỏ đến một chuỗi null-chấm dứt hoàn toàn, không phải là một nhân vật duy nhất, vì vậy tôi hỏi nếu điều này thực sự là những gì bạn muốn làm.

Nếu nó thực sự những gì bạn muốn, câu trả lời là đơn giản:

theval = &thestring[i]; 

Nếu hàm được thực sự mong đợi một chuỗi nhưng bạn muốn vượt qua nó một chuỗi của một nhân vật duy nhất, một cách tiếp cận hơi khác nhau được gọi là cho:

char theval[2] = {0}; 
theval[0] = thestring[i]; 
result = func(theval); 
+0

Vì anh ấy đã sử dụng dây, tôi đoán anh ấy chỉ tìm kiếm một con trỏ đến char. –

+1

@LuchianGrigore, rõ ràng là hàm này yêu cầu một con trỏ tới char nhưng không rõ tại sao. Nó là tầm thường để vượt qua một char duy nhất như một tham số, do đó, nó nhiều khả năng mà các chức năng có trong một con trỏ đến một chuỗi null chấm dứt. –

3

Tôi đoán rằng cuộc gọi func đang chờ chuỗi C làm đầu vào. Trong trường hợp đó, bạn có thể thực hiện các thao tác sau:

string theString = "abc123"; 
char tempCString[2]; 
string result; 

tempCString[1] = '\0'; 

for(string::iterator it = theString.begin(); 
    it != theString.end(); ++it) 
{ 
    tempCString[0] = *it; 
    result = func(tempCString); 
} 

Điều này sẽ tạo ra một chuỗi C nhỏ (vô hạn ký tự) sẽ có độ dài 1 cho mỗi lần lặp.

Vòng lặp for có thể được thực hiện với chỉ mục (như bạn đã viết) hoặc với trình vòng lặp (như tôi đã viết) và nó sẽ có cùng kết quả; Tôi thích iterator chỉ cho sự nhất quán với phần còn lại của STL.

Một vấn đề khác cần lưu ý (mặc dù đây có thể chỉ là kết quả của việc tổng quát mã) là result sẽ bị ghi đè trên mỗi lần lặp lại.

0

Bạn có thể giữ địa chỉ của nguyên tố đó:

theval = &thestring[i];

+0

Bạn có thể vui lòng định dạng mã của bạn bằng cách làm nổi bật nó và nhấn Ctrl + K – WhatsThePoint

Các vấn đề liên quan