編輯
這是一種解決方法,你應該在你自己的風險使用它! ;) 我的意思是如果它真的是你最後的選擇。
由於您沒有指定字符串的種類,爲簡單起見,它僅由大寫字母(AABBBCC)組成。 大寫字母用十進制數字表示(A = 65,Z = 90,man ascii)。
該方法包括兩個步驟: 1)在您通過coder.ceval調用的函數中,應該從要返回的字符串構建標量值。 2)你必須從標量值重建字符串。
下面的代碼通過一個簡單的例子來說明如何執行這兩個步驟。請記住,這只是一個例子,你必須努力。假設例如您需要返回字符串「ABC」,那麼您可以返回由三個2位數字組成的標量「656667」:65 = A,66 = B,67 = C。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int i, len, n;
// First convert a string in a scalar value
char str[] = {'A', 'B', 'C', '\0'};
printf("str = %s\n", str);
len = strlen(str);
for (i = 0; i < len; i++) {
n = str[i] + i*100;
}
printf("n = %d\n", n);
// You return a scalar that is composed by 65,66,67 ---> A,B,C
int y = 656667;
char num[100];
char letter[3];
// convert the number in a string
snprintf(num, 100, "%d", y);
printf("num = %s\n", num);
len = strlen(num);
printf("num len = %d\n", len);
// here we assume that the number of digits id even only ascii letters
if ((len%2) != 0) exit(1);
// Now we have to store the number of two digits as numbers and
// then convert the to char and finally append tehm to a string
int *ni = malloc((len/2)*sizeof(int));
char *string = malloc(len + 1);
// Here I use a lot of intermediate steps to make it clear
char c = 0;
for (i = 0; i < len/2; i+=1) {
snprintf(letter, 3, "%c%c", num[2*i], num[2*i+1]);
ni[i] = atoi(letter);
c = (char)ni[i];
printf("letter %d = %s, x = %d, c = %c\n", i, letter, ni[i], c);
string[i] = c;
printf("string[%d] = %c\n", i, string[i]);
}
// print the final string
string[len] = '\0';
printf("string = %s\n", string);
return 0;
}
小寫字母開始於97,但隨後通過使用一些「特殊號碼」的2個位數甚至可以決定後的「特殊閱讀在字符串的開頭2個位數和3個位數變成3個位數,但是數」。
好的,我不確定這會有幫助,但至少我希望你覺得它很有趣。