[英]Remove spaces from an array in C?
我試圖從我的數組“ secuencia”中刪除空格,用戶給了我這個條目:
“ 1 2 3 4 5 6 7 8 9”
我想刪除空格,並將其保存在另一個數組中以備后用。 然后,像我對數組“ palancas”和“ palancaroja”所做的那樣,用“ ATOI”轉換為整數。 那兩個數組只包含一個數字,所以我對它們沒有問題。
請幫助我...我正在用ANSI C編程。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, const char * argv[])
{
char palancas [20000];
int palancai;
char palancaroja[10];
int palancarojai;
char secuencia[20000];
char temp[20000];
int j = 0;
printf("Dame El Numero De Palancas:");
fgets(palancas, 20000, stdin);
printf("Dame La Posision De La Palanca Roja:");
fgets(palancaroja, 10, stdin);
palancai = atoi(palancas);
palancarojai = atoi(palancaroja);
printf("Dame La cadena");
fgets(secuencia, 20000, stdin);
for (int i = 0; i < palancai; i++) {
if (secuencia [i] != ' ') {
temp [i] = secuencia [i];
printf("%s", temp);
}
}
}
這是從字符串中刪除空格的最簡單方法。
char *SourcePtr = secuencia;
char *TargetPtr = SourcePtr;
while (*SourcePtr != 0)
{
if (*SourcePtr != ' ')
{
*TargetPtr = *SourcePtr;
TargetPtr += 1;
}
SourcePtr += 1;
}
*TargetPtr = 0;
關鍵部分的翻譯版本
for (int i = 0; i < length; i++) {
if (source[i] != ' ') {
temp[i] = source[i];
printf("%s", temp);
}
}
此代碼將每個字符從數組source
復制到數組temp
,但僅跳過空格。 因此,如果使用XXXXX
初始化了temp
,並且source
是ABC
,那么在執行循環之后, temp
是AXBXC
。
您使用了兩個索引(請參閱其他答案)
#include <stdio.h>
//copy to d from s removed space
void remove_space(char *d, const char *s){
for(;*s;++s){
if(*s != ' ')
*d++ = *s;
}
*d = *s;
}
int main(){//DEMO
char secuencia[] = "1 2 3 4 5 6 7 8 9";
char temp[sizeof(secuencia)];
remove_space(temp, secuencia);
puts(temp);//123456789
return 0;
}
您可以使用strtok並用定界符字符串為“”標記所獲得的字符串。
換一種說法:
char * tok;
int i = 0;
tok = strtok(secuencia, " ");
while(tok != NULL){
temp[i] = tok[0];
i++;
tok = strtok(NULL, " ");
}
但是,只有在保證每個空格之間只有一位數字的情況下,這才起作用。 復制它的另一種方法是使用另一個循環,循環遍歷strtok直到到達'\\ 0'或使用strcpy。
首先,我認為您的for循環正在查看錯誤的變量。 您正在嘗試在palancai上循環播放,而實際上您想在secuencia循環播放。
在下面,您可以找到一個可以解析您的int的函數。
int MyIntParse(char* str)
{
int iReturn = 0;
for(int i=0;i<20000;++i)
{
iReturn *=10;
switch(str[i])
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '0':
iReturn = iReturn + (str[i] - '0');
break;
}
}
return iReturn;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.