2013-06-25 2 views
1

Я пишу код, где код ведет себя по-другому, если мой массив не заканчивается пустым пространством. Я хочу проверить, есть ли место в конце или нет. Если нет, то я хочу добавить пробел в конец моего массива. вот код для массива.Конкатенировать «пробел» до конца массива

char* buffer[1024]; 
fgets(buffer,1024,fp); 
char* str = buffer+2; // don't need the first two characters 
char* pch; 
pch = strtok(str," ");//I am dividing the string into tokens as i need to save each word in a separate variable 
. 
. 
. 

Так что мой вопрос, во-первых, как я могу проверить, если последний символ str пространство или нет? Во-вторых, если это не пространство, как добавить пространство?

Я уже пробовал strcat, но я думаю, что проблема в том, что я до сих пор не могу понять, как узнать, является ли последний символ пространством или нет. Я знаю, что все это можно сделать легко с помощью строк и векторов. Но я хотел бы получить решение для моего кода. Благодаря!

EDIT: Ниже представлен код разбиения по строке и подсчет количества слов.

//At the end of this while loop. ncol will contain the number of columns 
while(1){ 
fgets(buffer,1024,fp); 
if (buffer[1] == 'C'){ // the line is #C 1 2 3 4 5 6 7 8 9 10 11 12 13 
    char* str = buffer+2; 

int n = strlen(str); 
if(n == 0 || str[n-1] != ' ') { 
str[n] = ' '; 
str[n+1] = '\0'; 
} 

    char* pch; 
    pch = strtok(str," "); 
    while(pch != NULL){ 
     ncol++; 
     pch = strtok (NULL, " "); 

    } 
} 
if(buffer[0] == '#'){ 
    numHeader++; 
    } 
    else {break;} 

} 
+0

Вы спрашиваете действительно о C++. Это выглядит как c. –

+0

Поскольку вы против использования каких-либо функций C++ здесь, даже когда это решение в текущей форме вопроса, я собираюсь заменить [tag: C++] на [tag: c] на этом. Прекратите злоупотреблять тегами. – Griwes

+0

Я думаю, что это лучше 'strtok (str," \ n ")', если это для 'strtok'. – BLUEPIXY

ответ

1

Вот код для вашего конкретного случая

int n = strlen(str); 
// *** RTRIM() 
int idx = n-1; 
for(; idx >= 0; idx--) 
    if(str[idx] != '\0' && str[idx] != " " && str[idx] != '\t' && str[idx] != '\n' && str[idx] != '\r') 
     break; 
str[idx + 1] = '\0'; 
// *** 
int cnt = 0; 
char* pch = strtok(str, " "); 
while (pch != NULL) 
{ 
    cnt++; 
    printf ("%s\n",pch); 
    pch = strtok (NULL, " "); 
} 

EDIT использовать правую боковую подрезать

+1

Чтобы быть педантичным, мы должны проверить, что 'n <1023'. – Emmet

+0

@Emmet - «технически правильный» - лучший вид правильного, отредактированного. –

+0

@LastCoder Интересно, что я использую тот же код. Но без пробела в конце моего «буфера» массива я получаю cnt = 13, а с пробелом - cnt = 14. Было бы действительно признательно решение этого. Причина, по которой я не могу использовать строки или другие параметры, заключается в том, что я должен быть совместим с остальной частью кода. И если я использую здесь строку, то мне придется изменить много других вещей, которые представляют большую проблему, чем текущая. – detraveller

0

Поскольку вы помечено ваш вопрос C++:

std::string str = "bla "; 
if (str[str.size()-1] != ' ') 
    str.push_back(' '); 
else 
    //do smth 
+0

Как я уже сказал, я не хочу использовать строки. – detraveller

+0

он четко отметил, что не хочет использовать 'string' –

+0

Тогда он не должен был помечать это с помощью [tag: C++] ... – Griwes