1

被困在这个血腥的时代。似乎没有简单的方法来做到这一点!

会给予一些帮助,谢谢!

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

char (char *s, const int len) {
{
   static const char alphanum[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                                  "123456789";
   for (int i = 0; i < len; ++i) {
        s[i] = alphanum[(sizeof(alphanum) - 6)];
    }

    s[len] = 0;
    memmove(s+pos+1, s+pos, len-pos+1);
    s[pos]='-';
    puts(s);
}

int main (void)
{
//print the random digits but in the middle need to insert - e.g
//FJ3-FKE
}
4

2 回答 2

3

有两种简单的方法。

如果您只需要打印这些东西,您可以在输出中添加破折号,如下所示:

fwrite(s, pos, stdout);
putchar('-');
puts(s+pos);

或者,如果用于的缓冲区s足够大,可以再容纳一个char,您可以使用memmove为破折号腾出空间,添加破折号,然后打印字符串:

memmove(s+pos+1, s+pos, len-pos+1);
s[pos]='-';
puts(s);

(所有这一切都假设这pos是插入破折号的位置)

于 2013-07-16T02:29:33.620 回答
0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

void func(char *s, int len, int pos) {
    static const char alphanum[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                                   "123456789";
    for (int i = 0; i < len; ++i) {
        s[i] = alphanum[rand()%(sizeof(alphanum)-1)];
    }
    s[len] = 0;

    if(0 < pos && pos < len){
        memmove(s+pos+1, s+pos, len-pos+1);
        s[pos]='-';
    }
}

int main (void){
    char s[10];
    srand(time(NULL));
//print the random digits but in the middle need to insert - e.g
//FJ3-FKE
    func(s, 6, 3);
    puts(s);
    return 0;
}
于 2013-07-16T08:41:08.693 回答