帮助我连接字符串 [英] Help me with Concatenating strings

查看:67
本文介绍了帮助我连接字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好。


我正在努力将perl上的程序转换为C语言,并且遇到串联字符串的

问题。

现在这是一个描述问题的小程序,如果你帮我解决这个小代码中的
,我可以在我自己的程序中解决它...你< br $> b $ b不想让头疼:-)


所以,问题是,我建立了一个数组......就像这样。


char * my_array [10];

my_array [0] =" Sally \ n";

my_array [ 1] =" Ndiya \ n";

my_array [2] =" Samantha \ n";

my_array [3] =" Sara \ n" ;;

my_array [4] =" Cadillac \ n";

my_array [5] =" GM For Ever\\\
" ;;

my_array [6] =" SlacWare \ n";

my_array [7] =" Google \ n";

my_array [8 ] =Google越来越多了\ n;

my_array [9] =" You \ n";

my_array [10] =" Computers\\\
" ;;


我的程序将收到一个参数-char * argv [] - 来自用户。


int main(int argc,char * argv [])

我想将给定的参数连接到at每行的第一行

我的数组。

所以,如果我们想象连接后的数组,它看起来像

这个(假设给定的参数是ILove)。


my_array [0] =" ILoveSally\\\
";

my_array [1] =" ; ILoveNdiya \ n" ;;

my_array [2] =" ILovesamantha \ n";

my_array [3] =" ILoveSara \ n";

my_array [4] =" ILoveCadillac \ n";

my_array [5] =" ILoveGM For Ever\\\
";

my_array [6] =" ILoveSlacWare \ n";

my_array [7] =" ILoveGoogle \ n";

my_array [8] =" ILoveGoogle再次出现问题t ;;

my_array [9] =" ILoveSAMI \ n";

my_array [10] =" ILoveComputers \ n"; * /


我试过strcat()-strings.h-但结果并不是我在寻找

for。


阅读代码..评论将有助于理解

问题..我的问题示例的整个代码都有。


#include< stdio.h>


int main(int argc,char * argv [])

{int i = -1;

char * my_array [10];


my_array [0] =" Sally \ n";

my_array [1] = Ndiya \ n;;

my_array [2] =" Samantha \ n" ;;

my_array [3] =" Sara \ n" ;;

my_array [4] =" Cadillac \ n";

my_array [5] =" GM For Ever\\\
";

my_array [6] =" SlacWare \ n";

my_array [7] =" Google \ n";

my_array [8] ="谷歌更多d more\\\
" ;;

my_array [9] =" You \ n";

my_array [10] =" Computers\\\
";


while(i ++< 10)

{

printf(argv [1]); //不要这样做..请读我的评论。

printf(my_array [i]);

}


//我需要你的帮助来修复下面的循环,我想把给定的

数据 - * argv [] - 插入到我的数组的每一行。

//例如,如果用户已经输入

// root @ localhost #test ILove

//结果将是:

/ / ILoveSally

// ILoveNdiya

// .. iec

//

//但不要''通过打印给定的数据,然后是my_array

行(我的意思是通过打印它两个)来做到这一点,因为我需要给定数据

在第一个连接我的数组的每一行。

//所以,my_array看起来像这样

// my_array [0] =" ILoveSally\\\
" ;;

// my_array [1] =" ILoveNdiya \ n";

// my_array [2] =" ILovesamantha \ n";

// my_array [3] =" ILoveSara \ n";

// my_ array [4] =" ILoveCadillac \ n";

// my_array [5] =" ILoveGM For Ever\\\
";

// my_array [ 6] =" ILoveSlacWare \ n";

// my_array [7] =" ILoveGoogle \ n";

// my_array [8] =" ; ILoveGoogle再次\ n" ;;

// my_array [9] =" ILoveSAMI \ n";

// my_array [10] =" ILoveComputers \\ \\ n" ;; * /


while(i ++< 10)

{

//在这里输入您的代码..谢谢

}

返回0;
t更改该数组中的任何内容,因为它们都是只读的

常量。


所以你要么需要另一个数组,要么是固定大小的字符串,要么得到

内存动态,通过malloc()或你自己的数组。为了简单起见,我为了b $ b推荐了一些与后者相关的东西。没有测试过
,但通常在下面的代码是正常的。添加一些明显的错误

检查额外的信用额度。使用snprintf可以提高安全性。

char BigPool [1000000]; //或者你期望的任何尺寸;


char Strs [STRINGS_IN_LIST] = {" foo"," bar",........};

int Free = 0;


int i,Len;


for(i = 0; i< STRINGS_IN_LIST; i ++)

免费+ = sprintf(BigPool [免费],%s%s,argv [无论如何],Strs [

i])+ 1;


oops,我忘了记录每个创建的字符串的地址,试试这个:

char BigPool [1000000]; //或者你期望的任何尺寸;


char Strs [STRINGS_IN_LIST] = {" foo"," bar",........};


char * Outstrs [STRINGS_IN_LIST];

int Free = 0;


int i,Len;


for(i = 0; i< STRINGS_IN_LIST; i ++)

Free + = sprintf(OutStrs [i] = BigPool [Free],"%s%s" ;,argv [

无论如何],Strs [i])+ 1;


c张贴:
< blockquote class =post_quotes>
char * my_array [10];



此数组包含十个元素。


my_array [0] =" Sally \ n" ;;

my_array [1] =" Ndiya \ n";

my_array [2] =" Samantha \ n";

my_array [3] =" Sara \ n";

my_array [4] =" Cadillac \ n";

my_array [5 ] =" GM For Ever\\\
";

my_array [6] =" SlacWare \ n";

my_array [7] =" Google \\ \\ n" ;;

my_array [8] =" Google越来越多\ n";

my_array [9] =" You \ n";

my_array [10] =" Computers\\\
" ;;



在这里,您分配了11个单独的元素。


#include< stdio .h>


int main(int argc,char * argv [])

{int i = -1;

char * my_array [10];


my_array [0] =" Sally \ n";

my_array [1] =" Ndiya \ n" ;;

my_array [2] =" Samantha \ n" ;;

my_array [3] =" Sara \ n";

my_array [4] =" Cadillac \ n";

my_array [5] =" GM For Ever\\\
" ;;

my_array [6 ] =" SlacWare \ n";

my_array [7] =" Google \ n";

my_array [8] =" Google越来越多\ n" ;;

my_array [9] =" You \ n";

my_array [10] =" Computers\\\
" ;;



再来一次,你分配给11个元素。


while(i ++< 10)

{

printf(argv [1]); //不要这样做..请读我的评论。

printf(my_array [i]);

}



为什么要求助于此?循环0到10可以简单得多:


unsigned i = 0;


do {


} while(++ i!= 11);


或者,如果您更喜欢效率较低的简单性:


for(unsigned i = 0; i!= 11; ++ i)

{


}


你还在假装你的阵列中有11个元素......


-


Frederick Gotham

Hi everybody.

I''m working on converting a program wriiten on perl to C, and facing a
problem with concatenate strings.
Now here is a small program that descripe the problem, if you help me
to solve in this small code, I can solve it on my own program...you
don''t want to have head-ache :-)

So, the problem excatly is, I built an array..just like this one.

char *my_array [10];
my_array[0] = "Sally\n";
my_array[1] = "Ndiya\n";
my_array[2] = "Samantha\n";
my_array[3] = "Sara\n";
my_array[4] = "Cadillac\n";
my_array[5] = "GM For Ever\n";
my_array[6] = "SlacWare\n";
my_array[7] = "Google\n";
my_array[8] = "Google more and more\n";
my_array[9] = "You\n";
my_array[10] = "Computers\n";

my program will recieve an argument -char *argv[]- from the user.

int main(int argc,char *argv[])
I want to concatenate the given argument to at the first of each line
of my array.
so, if we imagine the array after the concatenating, it would look like
this (suppose the given argument is "ILove").

my_array[0] = "ILoveSally\n";
my_array[1] = "ILoveNdiya\n";
my_array[2] = "ILovesamantha\n";
my_array[3] = "ILoveSara\n";
my_array[4] = "ILoveCadillac\n";
my_array[5] = "ILoveGM For Ever\n";
my_array[6] = "ILoveSlacWare\n";
my_array[7] = "ILoveGoogle\n";
my_array[8] = "ILoveGoogle again\n";
my_array[9] = "ILoveSAMI\n";
my_array[10] = "ILoveComputers\n";*/

I tried strcat() -strings.h- but the result wasn''t what I''m looking
for.

read the code..and the comments will help to understand the
problem..here is the whole code of my problem example.

#include <stdio.h>

int main(int argc,char *argv[])
{int i=-1;
char *my_array [10];

my_array[0] = "Sally\n";
my_array[1] = "Ndiya\n";
my_array[2] = "Samantha\n";
my_array[3] = "Sara\n";
my_array[4] = "Cadillac\n";
my_array[5] = "GM For Ever\n";
my_array[6] = "SlacWare\n";
my_array[7] = "Google\n";
my_array[8] = "Google more and more\n";
my_array[9] = "You\n";
my_array[10] = "Computers\n";

while(i++ < 10)
{
printf(argv[1]); //Don''t do it like this..read my comments please.
printf(my_array[i]);
}

// I need your help to fix below loop, I want to cancatenate the given
data -*argv[]- to each line of my array.
// For Example, if the user enetered
// root@localhost# test ILove
// the result would be:
// ILoveSally
// ILoveNdiya
// ..etc
//
//But don''t do it by printting the given data followed by my_array
lines(I mean by printting it twoice), because I need the given data to
be concatenated at the first of each line of my array.
//So, my_array would look like this
// my_array[0] = "ILoveSally\n";
// my_array[1] = "ILoveNdiya\n";
// my_array[2] = "ILovesamantha\n";
// my_array[3] = "ILoveSara\n";
// my_array[4] = "ILoveCadillac\n";
// my_array[5] = "ILoveGM For Ever\n";
// my_array[6] = "ILoveSlacWare\n";
// my_array[7] = "ILoveGoogle\n";
// my_array[8] = "ILoveGoogle again\n";
// my_array[9] = "ILoveSAMI\n";
// my_array[10] = "ILoveComputers\n";*/

while (i++ < 10)
{
// type your code here..Thanks
}
return 0;
}
thank you for your time.

解决方案

you can''t change anything in that array, as those are all read-only
constants.

So you either need another array, either fixed size strings, or get the
memory dynamically, either thru malloc() or out of your own array. I
recommend something aloong the lines of the latter for simplicity. Not
tested, but generally on track below code is. Add some obvious error
checks for extra credit. Use snprintf for extra safety.
char BigPool[ 1000000 ]; // or whatever size you expect;

char Strs[ STRINGS_IN_LIST ] = { "foo", "bar", ........ };
int Free = 0;

int i, Len;

for( i = 0; i < STRINGS_IN_LIST; i++ )
Free += sprintf( BigPool[ Free ], "%s%s", argv[ whatever ], Strs[
i ] ) + 1;


oops, I forgot to log the address of each created string, try this:
char BigPool[ 1000000 ]; // or whatever size you expect;

char Strs[ STRINGS_IN_LIST ] = { "foo", "bar", ........ };

char * OutStrs[ STRINGS_IN_LIST ];
int Free = 0;

int i, Len;

for( i = 0; i < STRINGS_IN_LIST; i++ )
Free += sprintf( OutStrs[ i ] = BigPool[ Free ], "%s%s", argv[
whatever ], Strs[ i ] ) + 1;


c posted:

char *my_array [10];


This array contains ten elements.

my_array[0] = "Sally\n";
my_array[1] = "Ndiya\n";
my_array[2] = "Samantha\n";
my_array[3] = "Sara\n";
my_array[4] = "Cadillac\n";
my_array[5] = "GM For Ever\n";
my_array[6] = "SlacWare\n";
my_array[7] = "Google\n";
my_array[8] = "Google more and more\n";
my_array[9] = "You\n";
my_array[10] = "Computers\n";


Here, you assign to eleven separate elements.

#include <stdio.h>

int main(int argc,char *argv[])
{int i=-1;
char *my_array [10];

my_array[0] = "Sally\n";
my_array[1] = "Ndiya\n";
my_array[2] = "Samantha\n";
my_array[3] = "Sara\n";
my_array[4] = "Cadillac\n";
my_array[5] = "GM For Ever\n";
my_array[6] = "SlacWare\n";
my_array[7] = "Google\n";
my_array[8] = "Google more and more\n";
my_array[9] = "You\n";
my_array[10] = "Computers\n";


Again here, you assign to eleven elements.

while(i++ < 10)
{
printf(argv[1]); //Don''t do it like this..read my comments please.
printf(my_array[i]);
}


Why resort to that? Looping 0 through 10 can be much simpler:

unsigned i = 0;

do {

}while(++i != 11);

Or, if you''d prefer the less efficient simplicity of:

for(unsigned i = 0; i != 11; ++i)
{

}

You''re still pretending that you''re array has eleven elements though...

--

Frederick Gotham


这篇关于帮助我连接字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆