私が取り組んでいるプログラムを完成させるために、後で使うために文字列をスタックに入れなければなりません。例えば、私はこの文字列を持っていたと言う:Cの文字列から1つの単語を得るには?
「22 15から2 +」
理想的には、私は最初、文字列から22を抽出し、別、一時的な文字列に配置し、次にとしてそれを操作したいですをお願いします。ここで私が使っていると思うコードがありますが、それは非常に複雑です。
void evaluatePostfix(char *exp){
stack *s = initStack();
char *temp_str;
char temp;
int temp_len, val, a, b, i=0, j;
int len = strlen(exp);
while(len > 0){
temp_str = malloc(sizeof(char)); //holds the string i am extracting
j=0; //first index in temp_str
temp = exp[i]; //current value in exp, incremented later on the function
temp_len = 1; //for reallocation purposes
while(!isspace(temp)){ //if a white space is hit, the full value is already scanned
if(ispunct(temp)) //punctuation will always be by itself
break; //break if it is encountered
temp_str = (char*)realloc(temp_str, temp_len+1); //or else reallocate the string to hold the new character
temp_str[j] = temp; //copy the character to the string
temp_len++; //increment for the length of temp_str
i++; //advance one value in exp
j++; //advance one value in temp_str
len--; //the number of characters left to scan is one less
temp = exp[i]; //prepare for the next loop
} //and so on, and so on...
} //more actions follow this, but are excluded
}
私が言ったように、過度に複雑です。このコードを抽出するための簡単な方法はありますか?私は確かに、私が抽出する必要がある値と文字の間に空白があることに依存することができます。
whileループの後の 'temp_str'はどうなりますか?それはちょうどメモリが流出したか、それを返すことを期待しましたか? – Soren
なぜ 'strtok()'を使用せず、元の部分文字列へのポインタを格納するのでしょうか。 strtokは元の文字列バッファを処理するので、再割り当ては必要ありません – xvan
'malloc(sizeof(char));' o.O –