我正在尝试从我的数组“secuencia”中删除空格,用户给我这个条目:
“1 2 3 4 5 6 7 8 9”
我想删除空格,并将其保存在另一个数组中以供日后使用。然后,转换为带有“ATOI”的整数,就像我对数组“palancas”和“palancaroja”一样。这两个数组只包含一个数字,所以我对它们没有任何问题。
请帮助我......我正在使用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);
}
}
}
答案 0 :(得分:1)
这是从字符串中删除空格的最简单方法。
char *SourcePtr = secuencia;
char *TargetPtr = SourcePtr;
while (*SourcePtr != 0)
{
if (*SourcePtr != ' ')
{
*TargetPtr = *SourcePtr;
TargetPtr += 1;
}
SourcePtr += 1;
}
*TargetPtr = 0;
答案 1 :(得分:1)
关键部分的翻译版本
for (int i = 0; i < length; i++) {
if (source[i] != ' ') {
temp[i] = source[i];
printf("%s", temp);
}
}
此代码将数组source
中的每个字符复制到数组temp
,但只是跳过空格。因此,如果使用temp
初始化XXXXX
而source
为A B C
,则执行循环后temp
为AXBXC
。
您使用了两个索引(请参阅其他答案)
答案 2 :(得分:1)
#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;
}
答案 3 :(得分:0)
您可以使用strtok并将分隔符字符串为“”的字符串标记为。“。
换句话说:
char * tok;
int i = 0;
tok = strtok(secuencia, " ");
while(tok != NULL){
temp[i] = tok[0];
i++;
tok = strtok(NULL, " ");
}
这只有在保证每个空间之间只有一位数的情况下才有效。复制它的另一种方法是使用另一个循环,循环执行strtok直到达到'\ 0',或者使用strcpy。
答案 4 :(得分:0)
首先我认为你的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;
}